-1

问题

我们有一个 ccTLD 网站 (example.de),其中包含不同语言的子文件夹,显然需要将其移至 example.com 以进行正确的语言定位。由于 example.com 属于母集团公司,该公司迄今为止一直对 us-group.com 的所有访问者进行 301 处理,并且不愿意让我们 301 将 example.de 发送到 example.com 并放弃他们现有的 301 到 us-group.com,我们需要解决一些问题。

任务

  • 来自北美和南美的访客应重新路由至 us-group.com
  • 来自所有剩余国家/地区(例如欧洲和东南亚)的访问者应从 example.de 重定向到 example.com 并留在那里,而不是重新路由到 us-group.com

挑战

我们认为许多来自美洲的访问者使用代理,因此通过 IP 重新路由不是一种选择。us-group.com 只会失去很多以前的流量。

是否可以使用结合了浏览器和系统语言(例如:EN-US、FR-CA、EN-CA、ES-AR、PT-BR 等)的 PHP 脚本重新路由它们?如果是这样,如何做到这一点?


其他想法:显然,这不是我们考虑做的唯一事情。在重新安排来自美洲的访客之前,我们会:

  1. 修改example.com域的DNS设置(一条记录:IP要改成德国服务器的IP地址)
  2. 修改vhost记录,因此德国服务器将example.com的访问者重定向到目录example.com/en/(包含example.de内容的英文部分)
  3. 将来自美洲的访问者重新路由到 us-group.com(通过浏览器和操作系统语言,如上所述)
4

1 回答 1

0

我使用与此类似的东西,但这是基于浏览器语言,而不是以任何方式基于系统语言。

if(!isset($_COOKIE['language'])){
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 4);
switch($lang){
        case "en-US":
          $rURL = "www.example.com"; 
          break;
        default:
          $rURL = "www.example.de"; 
      }

      if(isset($rURL)){
          setcookie("language", $rURL);
          header("HTTP/1.1 303 See Other");
          header('Location:' . $rURL);
      }
}

您当然可以更改 cookie 应该存储多长时间等等 :)

更新 如果您想将用户重定向回原始/检测到的站点(如果他们错误地或以其他方式回到错误的域,您可以简单地使用

if(!isset($_COOKIE['language'])){
    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 4);
    switch($lang){
            case "en-US":
              $rURL = "www.example.com"; 
              break;
            default:
              $rURL = "www.example.de"; 
          }

          if(isset($rURL)){
              setcookie("language", $rURL);
              header("HTTP/1.1 303 See Other");
              header('Location:' . $rURL);
          }
    }else{
         header("HTTP/1.1 303 See Other");
         header('Location:' . $_COOKIE['language']);
    }
于 2015-01-20T12:08:19.850 回答