2012-05-04 70 views
2

我有以下代码:重定向用户根据语言

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

回答

2

您需要的默认选项添加到您的数组:

$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(); 
} 
+0

但是这样做的话,它会创建重定向时,一个循环,并显示错误 - 至少在Chrome中。尽管感谢您的快速回答! –

+0

@Frederick Andersen如果它没有在丹麦语版本中创建循环,则不应该在英文版中这样做,除非您在丹麦语版本中做了与其他语言不同的内容。 – jeroen

+0

你会如何去创建一个会话变量?而en.mysite.com不会在任何地方重定向。 –

2
$sites = array(
    "da" => "http://www.mysite.com/", 
    "en" => "http://en.mysite.com/" 
); 
0

这个怎么样

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 

    $sub_domain = ($lang == "da") ? "www" : "en"; 

    $link = "http://".$sub_domain.".mysite.com/"; 

    header('Location: ' . $link); 
+0

不,对不起。重定向时创建循环错误。 –