Przekierowania HTTP
Przekierowania HTTP robione są natychmiastowo i bez pytania użytkownika. Nie zmieniają znaczenia zapytania, czyli dla klientów nie powinno być różnicy, czy pobierają plik bezpośrednio, czy po przekierowaniu.
Stronę wygenerowaną razem z przekierowaniem traktuje się tylko jako informację dla przeglądarek nie obsługujących przekierowań.
Przekierowania za pomocą HTTP są jedynym sensownym sposobem. „Alternatywy” takie jak <meta refresh>
czy JavaScript nie oferują nic pozytywnego użytkownikowi i stosowane są głównie jako obejście trudności jakie autorzy mają ze skonfigurowaniem
serwera.
Adres przekierowania: Location
Nagłówek Location
określa pod jaki adres ma następić przekierowanie. Musi to być absolutny URL, wraz z protokołem i domeną.
Location: http://example.com/nowastrona
Jeśli w PHP funkcja header()
nie działa, należy dodać ob_start()
na
początku skryptu!
Żeby przekierować pod adres na tym samym serwerze, można wykorzystać otrzymany nagłówek Host
. W PHP:
header('Location: http://'.$_SERVER['HTTP_HOST'].'/nowastrona');
Nagłówek Location
działa tylko, gdy ustawi się odpowiedni status.
Przekierowanie na stałe: 301 Redirect
Nie wolno ustawiać tego statusu w odpowiedzi na POST formularza, zobacz status 303
Status 301 oznacza, że przekierowanie jest na stałe i przeglądarka od tej pory może używać tylko wskazanego adresu. Może nawet uaktualnić zakładki użytkownika.
Wykorzystywany jest najczęściej do przekierowania z domeny bez „www.” na wersję z „www.” (lub odwrotnie). Przydatny jest też gdy publikuje się nową wersję strony mającą inne nazwy podstron, a chce się zapewnić poprawne działanie starych odnośników.
Przekierowanie tymczasowe: 302 Found
Nie wolno ustawiać tego statusu w odpowiedzi na POST formularza, zobacz status 303
Oznacza, że przekierowanie jest jednorazowe i przeglądarka w przyszłości ma nadal używać tego adresu.
Wykorzystywany jest do tworzenia specjalnych adresów, których treść jest zmienna, np.
http://example.com/najnowsza-wiadomosc http://example.com/losowy-artykul
Jeśli pod stroną z losowym artykułem od razu była by wygenerowana treść, wtedy użytkownik nie mógłby dodać konkretnego artykułu do zakładek, a wyszukiwarki zaindeksowałyby co innego, niż potem użytkownicy dostaną. Przekierowanie tymczasowe rozwiązuje ten problem — użytkownicy i wyszukiwarki mogą dostać konkretny adres w odpowiedzi na ogólny.
Przekierowanie po POST: 303 See other
Specyfikacja HTTP zabrania przeglądarkom, bez zezwolenia użytkownika, wysyłać formularzy pod przekierowany adres, dlatego jest osobny status, który wymusza zmianę metody z POST na GET.
Statusu 303 należy używać, gdy przekierowanie następuje w odpowiedzi na wysłany formularz, np. po zalogowaniu. Gwarantuje on, że przeglądarka nie odmówi przekierowania, ani nie będzie wysyłała formularza ponownie.
Dodatkowo dzięki zmianie metody z POST na GET odświeżenie strony nie będzie wysyłało formularza ponownie (choć nie jest to gwarancją, że formularz nie zostanie wysłany wielokrotnie).
Pytania? Komentarze? Napisz na forum kursu lub edytuj tę stronę.
Zmodyfikowano: 13.01.2007, 20:20