-1

客观的

我正在尝试根据用户语言完成自动重定向。我有一个完整的工作代码:

// List of available localized versions as 'lang code' => 'url' map
$sites = array(
    "da" => "http://www.fredrixdesign.com/",
    "en" => "http://en.fredrixdesign.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) 版本,这是主/根网站。如果用户是德语、英语、波兰语等,它将用户重定向到子域;en.fredrixdesign.com,这是网站的英文版本。

但是,当丹麦用户访问我的网站时,就会出现问题。位于我的 header.php 顶部的代码不断执行,这意味着它不断创建重定向,最终由于重定向过多而迫使浏览器创建错误。这是有道理的。

问题

我的问题是;我将如何修改上面的代码,所以它只执行一次重定向?如果它刚刚完成重定向,它将继续执行该站点。

4

4 回答 4

2

好吧,我敢打赌,只要仔细考虑一下,您就可以自己找到解决方案。您只需要检查当前域是否满足所需的语言。
稍微修改一下你的数组

$sites = array(
    "da" => "www.fredrixdesign.com",
    "en" => "en.fredrixdesign.com"
);

然后为重定向添加条件

if ($sites[$lang] != $_SERVER['HTTP_HOST']) {
    header('Location: http://' . $sites[$lang] . '/');
    exit;
}

就这样

于 2012-05-05T09:51:25.920 回答
0

您可以设置一个 cookie 值,告诉您您已经自动将用户重定向到特定语言的站点。如果该 cookie 存在,请不要再次进行重定向。您可能还希望考虑用户禁用 cookie 的情况。

于 2012-05-05T09:05:02.867 回答
0

您可以使用 GeoIP + .htaccess 来做到这一点,它真的很容易实现。

http://www.maxmind.com/app/mod_geoip

于 2012-05-05T09:09:08.023 回答
0

像这样的东西可以解决问题(当然有很多很好的解决方案,但是对于两种语言来说,做简单的事情并在需要时进行改进是没有害处的):

function redirectIfUserIsNotOnTheGoodURLBasedOnHisLanguage()
{
    // List of available localized versions as 'lang code' => 'url' map
    $sites = array(
        "da" => "http://www.fredrixdesign.com/",
        "en" => "http://en.fredrixdesign.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';

    if (($lang == 'da' && $_SERVER['SERVER_NAME'] == 'www.fredrixdesign.com') ||    // Danish people are on the right place
        ($lang == 'en' && $_SERVER['SERVER_NAME'] == 'en.fredrixdesign.com'))       // Other people are on the right place
    {
        // no redirection
        return;
    }

    // else redirect to desired location
    header('Location: ' . $sites[$lang]);
    exit(0);
}

redirectIfUserIsNotOnTheGoodURLBasedOnHisLanguage();
于 2012-05-05T09:37:38.343 回答