我有以下代码:重定向用户根据语言
<?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]);
?>
这将用户重定向到该网站,这是主要的网站,如果它是一个丹麦网站客户端的丹麦(DA)版本。这很好。
但是,我想,如果用户不是丹麦,但波兰,德国等,他们重定向到英文版本的网站,这是位于子域
http://en.mysite.com/
的如何实现那到现有的代码?提前致谢! - 弗雷德里克安德森
EDIT
溶液等;
$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();
}
但是这样做的话,它会创建重定向时,一个循环,并显示错误 - 至少在Chrome中。尽管感谢您的快速回答! –
@Frederick Andersen如果它没有在丹麦语版本中创建循环,则不应该在英文版中这样做,除非您在丹麦语版本中做了与其他语言不同的内容。 – jeroen
你会如何去创建一个会话变量?而en.mysite.com不会在任何地方重定向。 –