gpt4 book ai didi

php - 哪个是检测浏览器语言并将301重定向到主页的最友好的seo方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:33:17 24 4
gpt4 key购买 nike

我有一个多语言页面,我想检测客户端浏览器的语言,然后制作一个 301 主页或其他东西。但我不确定哪种方式更适合 seo。不知道web spider喜欢哪一个?还是其他方式?

<?php 
$LG=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
if (preg_match('/^[zZ][hH]/', $LG)) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://mydomain.com/cn/");
exit();} //jump to chinese version
else {
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://mydomain.com/en/");
exit();} //jump to english version
?>

<?php 
$LG=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
if (preg_match('/^[zZ][hH]/', $LG)) {
include ("http://mydomain.com/cn/");
} //include chinese version
else {
header("HTTP/1.1 301 Moved Permanently");
include ("http://mydomain.com/en/");
} //include english version
?>

或者其他方式?谢谢。

最佳答案

正如您在问题中已经假设的那样,您需要解析 Accept-LanguageHTTP/1.1 header ,在 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 中的 PHP 中可用。首先需要将其解析为您可以在 PHP 中更好地处理的结构,例如数组:

/**
* Convert Accept Language to sorted PHP array
*
* Related HTTP Specs:
* <http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4>
* <http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.9>
*
* @param string $accept header value
* @return array ([language-range] => qvalue, ...)
*/
function http_accept_language_array($accept = NULL)
{
if (!$accept && isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
$accept = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$accept = (string) $accept;

$pattern = '/([a-z]{1,8}(-[a-z]{1,8})?)(;q=([01](?:\.[0-9]{0,3})?))?(?=$|,[ ]*)/i';
preg_match_all($pattern, $accept, $matches);

$array = array();
if (count($matches[1]))
{
list(, $ranges,,, $qvals) = $matches;
# normalize ranges
foreach ($ranges as &$range)
$range = strtolower($range);
unset ($range);
# set default qvalue 1
foreach ($qvals as &$qval)
if ('' === $qval) $qval = '1';
unset ($qval);
$array = array_combine($ranges, $qvals);
arsort($array, SORT_NUMERIC);
}
return $array;
}

da, en-gb;q=0.8, en;q=0.7 将返回:

array(3) {
["da"] => string(1) "1"
["en-gb"] => string(3) "0.8"
["en"] => string(3) "0.7"
}

然后您需要解析这个排序数组以找到您的第一个匹配项,使用 en 默认值设置您的首选项:

$lang = 'en';
foreach (http_accept_language_array() as $range => $qvalue)
{
if (preg_match('/^zh[$-]/', $range))
{
$lang = 'cn';
break;
}
}

最后,您可以根据 $lang(或 include 或其他)进行重定向:

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://mydomain.com/$lang/");

如果您正在寻找一个现成的库来处理这个问题,一个现有的解决方案是 Symfony's HttpFoundation\Request或者在 PEAR 中有 HTTP::negotiateLanguage .

PHP intl 扩展有另一个相关的低级函数,但它不提供数组,而是提供单个值:locale_accept_from_http

更多 HTTP 相关信息的另一个通用资源是 Advanced handling of HTTP requests in PHP .

关于php - 哪个是检测浏览器语言并将301重定向到主页的最友好的seo方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8091296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com