2012-05-04 69 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

不,對不起。重定向時創建循環錯誤。 –