我想知道在語言重定向中我應該發送哪個HTTP狀態代碼。語言重定向的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/");
?>
相關問題:HTTP status for functional redirect
也許300,301,302,303?爲什麼?
編輯
谷歌最近公佈的這個: http://googlewebmastercentral.blogspot.com/2011/12/new-markup-for-multilingual-content.html
我發現這一點:
HTTP狀態300個多種選擇
所請求的資源相對應的任何一個一套 陳述,每個都有自己的規範(或用戶代理)可以選擇優選表示並且將請求重定向到該位置。因此,可以提供代理驅動協商信息(部分12),以便用戶(或用戶代理)可以選擇優選表示並且將請求重定向到該位置。
除非是HEAD請求,響應應該包括含有的資源特性和從 位置(一個或多個)用戶或用戶代理可以選擇一個最合適的列表的實體 。 實體格式由Content- 類型標題字段中給出的媒體類型指定。取決於用戶代理的格式和功能
,最合適的選擇的選擇可以是自動執行的 。但是,本規範並未定義 這種自動選擇的任何標準。
如果服務器有一個首選的表示形式,它應該在 字段中包含該表示的特定URI;用戶代理可以使用位置字段值進行自動 重定向。除非另有說明,否則此響應可緩存。
而且這樣的:
HTTP錯誤300 - 多種選擇
介紹
你的Web服務器認爲,客戶端提供的網址(例如,您的 Web瀏覽器或我們的CheckUpDown機器人)不夠具體,需要進一步選擇多種選擇。
這通常是這樣的情況,其中URL代表需要進行哪些較低級別選擇的高級別分組。一個 目錄,在該目錄中用戶必須選擇一個特定的文件以訪問 。HTTP循環
300錯誤
任何客戶端(例如Web瀏覽器或我們的CheckUpDown機器人) 通過以下週期,當它與Web服務器通信:
獲得的IP地址該網站的IP名稱(該網站的URL爲 ,沒有前導'http://')。此查找(IP地址轉換爲IP地址爲 )由域名服務器(DNS)提供。打開IP地址的IP 套接字連接。通過該套接字寫入HTTP數據流 。接收來自Web 服務器的HTTP數據流作爲響應。該數據流包含狀態碼,其值由HTTP協議確定。解析這個數據流爲 狀態碼和其他有用的信息。當客戶端收到一個 識別爲「300」的HTTP狀態代碼時,上述最後一步中發生此錯誤。
固定300個錯誤 - 一般
你應該做的第一件事是檢查你的URL在Web瀏覽器。如果 您看到某種網頁會提示您進一步操作/選擇 動作/選擇,那麼您的URL現有網頁服務器要處理的 不夠詳細。
固定300個錯誤 - CheckUpDown
你不應該看到這個錯誤在您的CheckUpDown帳戶,如果你 給我們的頂級網址(如www.isp.com)檢查。如果頂級URL發生 ,則極有可能是Web服務器 軟件被錯誤地編程或配置。如果您有 給我們一個低級別的URL(如www.isp.com/products/index.html)到 檢查,那麼很可能這個URL即使通過 網絡瀏覽器也無法訪問。
您應該做的第一件事是在Web瀏覽器中檢查您的URL。如果 您看到一個明智的網頁,那麼它可能表示我們的 軟件中存在缺陷。但是,如果您看到某種網頁會提示您進一步採取行動/選擇,那麼您的網址不適合我們檢查,因爲我們的系統不可能做出這種選擇。
無論何時遇到 300錯誤,請直接與我們聯繫(電子郵件首選)。只有我們可以爲你解決它們。如果我們的軟件 存在缺陷,我們將對其進行修復。但是,如果您的URL從根本上不適合我們使用 ,則需要在您的CheckUpDown帳戶中更改它(從 開始單擊'管理'按鈕)。
所有的選擇中,303是一個絕對不正確。 例如,如果將PUT添加到協商資源,則不希望HTTP庫在重定向後將請求更改爲GET。 –