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