语言重定向的HTTP状态代码是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (33)

我想知道应该用语言重定向发送哪个HTTP状态码。

我有以下的PHP代码,通过HTTP头重定向到Accept-Language浏览器头中最重要的语言。

<?
$langs = array();

if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    // break up string into pieces (languages and q factors)
    preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);

    if (count($lang_parse[1])) {
        // create a list like "en" => 0.8
        $langs = array_combine($lang_parse[1], $lang_parse[4]);

        // set default to 1 for any without q factor
        foreach ($langs as $lang => $val) {
            if ($val === '') $langs[$lang] = 1;
        }

        // sort list based on value 
        arsort($langs, SORT_NUMERIC);
    }
}

// look through sorted list and use first one that matches our languages
foreach ($langs as $lang => $val) {
    if (strpos($lang, 'ca')===0) {
    header("location: ca/");
    exit;
    } else if (strpos($lang, 'es')===0) {
    header("location: es/");
    exit;
    } 
  echo "$lang => $val<br>";
}
// show default site or prompt for language
header("location: en/");

?>

也许300,301,302,303?为什么?

提问于
用户回答回答于
用户回答回答于

可以在同一网址下使用各种语言,然后使用Accept-Language标题的内容协商,但我不会推荐。

我宁愿建议在你的网站的根网址,你发出一个重定向(303 - 见其他)到语言子页面(例如/en)。当你这样做的时候,用一个Vary标题来指定Accept-Language(和任何其他相关的标题,例如Cookie)。这样,任何中介(代理,缓存)都可以缓存响应。我特别不会发出301,因为你仍然想要链接指向根网址。在特定于语言的页面上,我会放入一个rel="canonical"根网址。

扫码关注云+社区

领取腾讯云代金券