我想知道我应该用语言重定向发送哪个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
"; } // show default site or prompt for language header("location: en/"); ?>
相关问题:功能重定向的HTTP状态
也许300,301,302,303?为什么?
编辑
谷歌最近发布了这个:http: //googlewebmastercentral.blogspot.com/2011/12/new-markup-for-multilingual-content.html
我找到了这个:
HTTP状态300多项选择
所请求的资源对应于一组表示中的任何一个,每个表示具有其自己的特定位置,并且正在提供代理驱动的协商信息(部分12),以便用户(或用户代理)可以选择优选表示并重定向其请求到该位置.
除非是HEAD请求,否则响应应该包括一个实体,其中包含资源特征和位置列表,用户或用户代理可以从中选择最合适的资源特征和位置.实体格式由Content-Type头字段中给出的媒体类型指定.取决于格式和功能
用户代理,可以自动选择最合适的选择.但是,该规范没有为这种自动选择定义任何标准.
如果服务器具有首选的表示选择,则它应该在Location字段中包含该表示的特定URI; 用户代理可以使用Location字段值进行自动重定向.除非另有说明,否则该响应是可缓存的.
还有这个:
HTTP错误300 - 多种选择
介绍
您的Web服务器认为客户端提供的URL(例如您的Web浏览器或我们的CheckUpDown机器人)不够具体,需要从许多选项中进行进一步选择.
这通常是URL表示需要进行较低级别选择的高级别分组的情况,例如用户必须选择要访问的特定文件的目录.
HTTP循环中有300个错误
任何客户端(例如您的Web浏览器或我们的CheckUpDown机器人)在与Web服务器通信时都会经历以下循环:
从站点的IP名称(没有前导'http://'的站点URL)获取IP地址.此查找(将IP名称转换为IP地址)由域名服务器(DNS)提供.打开与该IP地址的IP套接字连接.通过该套接字写入HTTP数据流.作为响应,从Web服务器接收HTTP数据流.此数据流包含状态代码,其值由HTTP协议确定.解析此数据流以获取状态代码和其他有用信息.当客户端收到识别为"300"的HTTP状态代码时,在上面的最后一步中会发生此错误.
修复300错误 - 一般
您应该做的第一件事是在Web浏览器中检查您的URL.如果您看到某种类型的网页提示您进一步操作/选择,那么您现在的URL不够详细,Web服务器无法处理.
修复300错误 - CheckUpDown
如果您提供了一个顶级URL(例如www.isp.com)来检查,您应该永远不会在CheckUpDown帐户上看到此错误.如果确实发生了顶级URL,则很可能是Web服务器软件编程或配置不正确.如果您向我们提供了一个低级别的URL(例如www.isp.com/products/index.html)进行检查,那么即使通过Web浏览器也无法访问此URL.
您应该做的第一件事是在Web浏览器中检查您的URL.如果您看到一个合理的网页,那么它可能表明我们的软件存在缺陷.但是,如果您看到某种类型的网页提示您进一步操作/选择,那么您的URL不适合我们检查,因为我们的系统不可能做出这种选择.
遇到300错误时,请直接与我们联系(首选电子邮件).只有我们能为您解决这些问题.如果我们的软件存在缺陷,我们将予以修复.但是,如果您的网址根本不适合我们使用,则需要在CheckUpDown帐户中进行更改(首先点击"管理"按钮).
Sampo Sarral.. 5
Google使用302 Found
重定向到本地化页面.
我认为如果谷歌使用它是安全的......
但是,检查所选响应应该做什么以及它的目的是什么并且它是否会影响缓存总是好的:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Google使用302 Found
重定向到本地化页面.
我认为如果谷歌使用它是安全的......
但是,检查所选响应应该做什么以及它的目的是什么并且它是否会影响缓存总是好的:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html