PHP:检测浏览器语言和重定向的正确方法

PHP:检测浏览器语言和重定向的正确方法,php,redirect,Php,Redirect,我正在尝试将点击重定向到我支持的语言之一,比如 如果我检测到英语浏览器语言,我将使用以下代码: $browser_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); http_response_code(301); if (preg_match("/(fr|en|nl|it|es|de)/",$browser_language)) { header("Location: ".$domain."/".$bro

我正在尝试将点击重定向到我支持的语言之一,比如

如果我检测到英语浏览器语言,我将使用以下代码:

$browser_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
http_response_code(301);
if (preg_match("/(fr|en|nl|it|es|de)/",$browser_language))
    {
        header("Location: ".$domain."/".$browser_language."/");
    }
else
    {
        header("Location: ".$domain."/en/");
    }
当我用我的浏览器尝试它时,它似乎工作得很好,但如果我使用谷歌的索引工具,它告诉我该页面有一个软404,因此它不能被索引。我设置了http代码301来避免这种情况,但它似乎不起作用

如果我用浏览器检查重定向,我会看到一个301指向正确的页面,但是如果我用谷歌、webgetest.org或Pingdom工具测试它,重定向似乎不起作用


有什么想法吗?

你能发布你用于语言检查的代码吗?你如何检测语言?当我需要做的时候,我解析头。示例:
接受语言:en,de;q=0.5
表示英语优先,德语优先。您可以检测
$browser\u language
是否包含“fr”、“en”等,但它可能比这复杂得多。实际上,您仍然只需重定向到
$domain/$HTTP\u ACCEPT\u LANGUAGE
,这样就可以是
$domain/en,de;q=0.5
@deceze他们只处理前两个字符,请注意在所示代码的第一行中使用了substr。当然,这仍然是一种相当幼稚的做法,甚至没有开始考虑像
q
这样的质量因素。@misorude你说得对,我忽略了这一点。