Как перенаправить на другой URL, идентифицирующий браузер И язык системы (PHP?

Проблема

У нас есть веб-сайт ccTLD (example.de) с подпапками для разных языков, который, очевидно, необходимо переместить на example.com для правильного выбора языка. Так как example.com принадлежит компании родительской группы, которая до сих пор 301 посещает всех посетителей us-group.com и не хочет разрешать нам 301ing example.de для example.com и отказываться от своих существующих 301s на 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. изменить настройки DNS домена example.com (запись: IP-адрес будет изменен на IP-адрес немецкого сервера)
  2. измените запись vhost, чтобы немецкий сервер перенаправлял посетителей example.com в каталог example.com/en/ (содержащий английские части содержимого example.de)
  3. Перенаправляйте посетителей из Северной и Южной Америки на us-group.com (по языку браузера и ОС, как упоминалось выше)

1 ответ

Я использую что-то похожее на это, это основано на языке браузера, но никак не зависит от языка системы.

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);
      }
}

Конечно, вы можете изменить время хранения куки и так далее:)

ОБНОВЛЕНИЕ Если вы хотите перенаправить пользователя обратно на исходный / обнаруженный сайт (если он по ошибке или другим способом вернется в неправильный домен, вы можете просто использовать

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']);
    }
Другие вопросы по тегам