У меня есть следующий код:
<?php // List of available localized versions as 'lang code' => 'url' map $sites = array( "da" => "http://www.mysite.com/", ); // Get 2 char lang code $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // Set default language if a `$lang` version of site is not available if (!in_array($lang, array_keys($sites))) $lang = 'en'; // Finally redirect to desired location header('Location: ' . $sites[$lang]); ?>
Это перенаправит пользователя на датскую (да) версию сайта, которая является основным сайтом, если это датский веб-клиент. Это отлично.
Но, я хочу, если пользователь не является датским, но польским, немецким и т. Д., Он перенаправляет их на английскую версию сайта, которая находится в субдомене
http://en.mysite.com/
Как реализовать это в существующем коде? Заранее спасибо! – Фредерик Андерсен
РЕДАКТИРОВАТЬ
Решение, подобное;
$sites = array( "da" => "http://www.mysite.com/", "en" => "http://en.mysite.com/" );
Не работает, поскольку он создает ошибку цикла при перенаправлении – по крайней мере, в Google Chrome.
EDIT 2
session_start(); if (isset( $_SESSION['redirect'])) { // do nothing / continue with rest of page } else { $_SESSION['redirect'] = true; // List of available localized versions as 'lang code' => 'url' map $sites = array( "da" => "http://www.mysite.com/", "en" => "http://en.mysite.com/" ); // Get 2 char lang code $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // Set default language if a `$lang` version of site is not available if (!in_array($lang, array_keys($sites))) $lang = 'en'; // Finally redirect to desired location header('Location: ' . $sites[$lang]); exit(); }
Вам нужно будет добавить параметр по умолчанию в ваш массив:
$sites = array( "da" => "http://www.mysite.com/", "en" => "http://en.mysite.com/" );
Изменить: если вы снова вызываете этот же код в "http://en.mysite.com/"
, он создаст цикл. Очевидным решением было бы не называть этот код там, но альтернативным решением было бы установить переменную сеанса, чтобы указать, что выбор языка уже имеет место.
Чтобы добавить эту переменную сеанса, вы можете сделать что-то вроде:
session_start(); if (isset( $_SESSION['redirect'])) { // do nothing / continue with rest of page } else { $_SESSION['redirect'] = true; // your language selection code with header call exit(); }
$sites = array( "da" => "http://www.mysite.com/", "en" => "http://en.mysite.com/" );
как насчет этого
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); $sub_domain = ($lang == "da") ? "www" : "en"; $link = "http://".$sub_domain.".mysite.com/"; header('Location: ' . $link);