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