Zastanawiam się, który kod stanu HTTP powinienem wysłać w przekierowaniach językowych.Kod stanu HTTP przekierowania języka
Mam następujący kod php do przekierowania przez nagłówki HTTP do najważniejszego języka w nagłówku przeglądarki 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/");
?>
Powiązane pytanie: HTTP status for functional redirect
Może 300, 301, 302, 303? Czemu?
EDIT
Google niedawno opublikowane w tym: http://googlewebmastercentral.blogspot.com/2011/12/new-markup-for-multilingual-content.html
Znalazłem to:
stan HTTP 300 Multiple Choices
Żądany zasób odpowiada któregokolwiek z zestaw reprezentacji , każdy z własną specyfikacją informacje o lokalizacji i informacje o negocjowanych informacjach o agentach (sekcja 12) są dostarczane, aby użytkownik (lub użytkownik) mógł wybrać preferowaną reprezentację, a następnie przekierować żądanie do tej lokalizacji.
O ile nie było to żądanie HEAD, odpowiedź POWINNA obejmować jednostkę zawierającą listę właściwości i lokalizacji zasobów z , którą użytkownik lub agent użytkownika może wybrać najbardziej odpowiedni. Format jednostki encji jest określany przez typ nośnika podany w polu nagłówka Content-Content ID- . W zależności od formatu i możliwości klienta użytkownika wybór najbardziej odpowiedniego ustawienia MOŻE być wykonywany automatycznie. Jednak ta specyfikacja nie definiuje żadnego standardu dla takiego automatycznego wyboru.
Jeśli serwer ma preferowany wybór reprezentacji, POWINIEN BYĆ NALEŻY zawierać konkretny identyfikator URI dla tej reprezentacji w polu Lokalizacja ; agenty użytkownika MOGĄ używać wartości pola Lokalizacja do automatycznego przekierowania. Ta odpowiedź jest buforowana, chyba że wskazano inaczej.
I tak:
Błąd HTTP 300 - Wiele wybory
Wprowadzenie
Serwer WWW uważa, że adres URL dostarczonych przez klienta (np przeglądarka Web lub nasz CheckUpDown robota) nie jest wystarczająco specyficzny, a dalsza selekcja musi być dokonana z wielu opcji.
Zwykle ma to miejsce, gdy adres URL reprezentuje wysoki poziom grupowania, z których należy dokonać wyboru niższego poziomu, np. katalog, w którym użytkownik musi wybrać określony plik, aby uzyskać dostęp do dostępu .
300 błędy w cyklu HTTP
Każdy klient (np przeglądarka internetowa lub nasza CheckUpDown robota) idzie przez następnego cyklu, gdy komunikuje się z serwerem WWW:
uzyskać adres IP z Nazwa IP witryny (adres URL witryny bez wiodącego "http: //"). To wyszukiwanie (konwersja nazwy IP na adres IP ) jest dostarczane przez serwery nazw domen (DNS). Otwórz połączenie gniazda IP z tym adresem IP. Przepisz strumień danych HTTP przez to gniazdo. Odbierz strumień danych HTTP z powrotem z serwera WWW w odpowiedzi. Ten strumień danych zawiera kody stanu, których wartości są określane przez protokół HTTP. Przetwórz ten strumień danych pod kątem kodów stanu i innych przydatnych informacji. Ten błąd występuje w ostatnim kroku, gdy klient otrzymuje kod statusu HTTP, który rozpoznaje jako "300".
Mocowanie 300 błędy - ogólne
Pierwszą rzeczą, jaką należy zrobić, to sprawdzić adres URL w przeglądarce internetowej. Jeśli pod numerem zobaczysz stronę sieci Web z monitem o dalszą działanie/opcje, twój adres URL w takiej postaci nie jest wystarczająco szczegółowy, aby serwer WWW mógł go przetworzyć.
Mocowanie 300 błędy - CheckUpDown
Nigdy nie należy tego błędu na koncie CheckUpDown jeśli dał nam adres URL najwyższego poziomu (takich jak www.isp.com) do sprawdzenia. Jeśli wystąpi on w przypadku adresu URL najwyższego poziomu, jest wysoce prawdopodobne, że oprogramowanie serwera WWW zostało niepoprawnie zaprogramowane lub skonfigurowane. Jeśli masz , podając nam niskopoziomowy adres URL (np. Www.isp.com/products/index.html) do sprawdzenia , to prawdopodobnie ten adres URL nie będzie dostępny nawet przez przeglądarkę internetową .
Najpierw należy sprawdzić adres URL w przeglądarce internetowej. Jeśli widzisz rozsądną stronę internetową, może to oznaczać usterkę w naszym oprogramowaniu . Jeśli jednak pojawi się strona internetowa z monitem o dalsze działania/wybory, adres URL nie będzie dla nas odpowiedni do sprawdzenia, ponieważ nasz system nie może dokonać takiego wyboru.
Skontaktuj się z nami bezpośrednio (e-mail preferowany) za każdym razem, gdy znajdziesz 300 błędów. Tylko my możemy je dla ciebie rozwiązać. Jeśli wystąpi usterka w , nasze oprogramowanie to naprawimy. Jeśli jednak Twój adres URL jest zasadniczo nieodpowiedni dla nas do korzystania z , musisz go zmienić na swoim koncie CheckUpDown (zacznij od kliknięcia przycisku "Zarządzaj").
Spośród wszystkich wyborów, 303 to taka, która jest zdecydowanie błędne. Na przykład, jeśli PUT do wynegocjowanego zasobu, nie chcesz, aby biblioteka HTTP zmieniała żądanie na GET po przekierowaniu. –