如何重新路由到识别浏览器和系统语言的不同URL(PHP?

时间:2015-01-20 11:55:21

标签: php reroute

问题

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

任务

  • 来自北美和南美洲的访客应该转到us-group.com
  • 来自所有其他国家(例如欧洲和东南亚)的访问者应该从example.de重定向到example.com并留在那里而不会被重新路由到us-group.com

挑战

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

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


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

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

1 个答案:

答案 0 :(得分: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']);
    }