Интересно, какой код состояния 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? Почему?
ИЗМЕНИТЬ
Google недавно опубликовал это: http://googlewebmastercentral.blogspot.com/2011/12/new-markup-for-multilingual-content.html
Я обнаружил следующее:
HTTP STATUS 300 Multiple Choices
Запрошенный ресурс соответствует любому из набора представлений , каждое из которых имеет свое собственное местоположение, и переговоры, управляемые агентом - информация (раздел 12) предоставляется для того, чтобы пользователь (или пользовательский агент) мог выбрать предпочтительное представление и перенаправить свой запрос в это место.
Если это не запрос HEAD, ответ ДОЛЖЕН включать объект , содержащий список характеристик ресурсов и местоположений из , который пользователь или пользовательский агент может выбрать наиболее подходящий . Формат объекта определяется типом мультимедиа, указанным в поле заголовка Content - Type. В зависимости от формата и возможностей
пользовательского агента выбор наиболее подходящего варианта МОЖЕТ быть выполнен автоматически. Однако эта спецификация не определяет какого-либо стандарта для такого автоматического выбора.
Если сервер имеет предпочтительный выбор представления, он ДОЛЖЕН включить конкретный URI для этого представления в поле Location ; пользовательские агенты МОГУТ использовать значение поля Location для автоматического перенаправления . Этот ответ кэшируется, если не указано иное.
И это:
Ошибка HTTP 300 - несколько вариантов выбора
Введение
Ваш веб-сервер считает, что URL-адрес, предоставленный клиентом (например, ваш веб-браузер или наш робот CheckUpDown), не является достаточно конкретны, и необходимо сделать дальнейший выбор из ряда вариантов.
Обычно это тот случай, когда URL-адрес представляет собой группу высокого уровня, из которой необходимо сделать выбор на более низком уровне, например каталог , в котором пользователь должен выбрать определенный файл для доступа.
300 ошибок в цикле HTTP
Любой клиент (например, ваш веб-браузер или наш робот CheckUpDown) проходит через следующий цикл, когда он связывается с веб-сервером:
Получить IP-адрес от IP-имя сайта (URL-адрес сайта без начального http: //). Этот поиск (преобразование IP-имени в IP-адрес ) обеспечивается серверами доменных имен (DNS). Откройте соединение сокета IP с этим IP-адресом. Запишите поток данных HTTP через этот сокет. Получите поток данных HTTP обратно от веб-сервера в ответ. Этот поток данных содержит коды состояния, значения которых определяются протоколом HTTP. Проанализируйте этот поток данных на наличие кодов состояния и другой полезной информации. Эта ошибка возникает на последнем шаге выше, когда клиент получает код состояния HTTP, который распознает как "300".
Исправление 300 ошибок - общее
Первое, что вам нужно сделать, это проверить свой URL в веб-браузере. Если вы видите какую-то веб-страницу, предлагающую вам дальнейшие действия / варианты, то ваш URL в его нынешнем виде недостаточно подробен для обработки веб-сервером.
Исправление 300 ошибок - CheckUpDown
Вы никогда не увидите эту ошибку в своем аккаунте CheckUpDown, если предоставили нам URL верхнего уровня (например, www.isp.com) для проверки. Если это действительно для URL верхнего уровня, весьма вероятно, что программное обеспечение веб-сервера было неправильно запрограммировано или настроено. Если вы предоставили нам низкоуровневый URL (например, www.isp.com/products/index.html) для проверки, то, вероятно, этот URL недоступен даже через веб-браузер .
Первое, что вам следует сделать, это проверить свой URL-адрес в веб-браузере. Если вы видите разумную веб-страницу, это может указывать на дефект в нашем программном обеспечении. Однако, если вы видите какую-то веб-страницу, предлагающую вам дальнейшие действия / варианты выбора, значит, ваш URL не подходит для нашей проверки, потому что наша система не может сделать такой выбор.
Свяжитесь с нами напрямую (желательно по электронной почте), если вы обнаружите 300 ошибок. Только мы можем решить их за вас. Если в нашем программном обеспечении обнаружится дефект, мы его исправим. Если, однако, ваш URL-адрес принципиально не подходит для использования нами , вам необходимо изменить его в своей учетной записи CheckUpDown (для начала нажмите кнопку "Управление").