
Serwerownie w Polsce (Warszawa)
Dostępność usług: 99,9% czasu
Autorskie rozwiązania IT
Kopia bezpieczeństwa co 24h

Krótki opisMod_rewrite to wyspecjalizowany dodatek do serwera WWW umożliwiający wykonanie "przezroczystego" dla użytkownika przekierowania na inny adres URL.
Posiada wiele zastosowań, począwszy od prostej zmiany nieaktualnych adresów na nowe, aż do zmiany linków zawierających zmienne wysyłane w standardzie GET na prostsze, dzięki czemu są one znacznie przyjaźniejsze zarówno osobom odwiedzającym serwis, jak również i wyszukiwarkom internetowym.
Wstęp do przekierowywania adresówCzytelne adresy to podstawa. Dobrze zaprojektowana strona internetowa posiada także logicznie rozplanowaną strukturę adresów. Zawarte jest w nich często wiele informacji pozwalających odwiedzającemu na zapamiętanie z łatwością pełnego adresu strony.
Jednakże wiele systemów zarządzania zawartością używa linków wyglądających podobnie do poniższego:
http://www.mojafirma.pl/sklep.php?kategoria=kapelusze&produkt=123
Nie jest to przyjazny adres, jednakże programistom dzięki standardowym mechanizmom języków skryptowych (PHP, ASP) jest go najłatwiej zaimplementować.
Ponadto wiąże się z nim kilka problemów:
Używając przepisywania linków uzyskamy więc znacznie prostszy i łatwiejszy do zapamiętania adres.
http://www.mojafirma.pl/produkty/kapelusze/123/
Jest on znacznie logiczniejszy, czytelniejszy i łatwiejszy do zapamiętania. Ponadto żadna wyszukiwarka nie będzie miała z nim problemów.
Proste przepisywanie linkówNa początek zastosujemy bardzo proste przekierowanie. Załóżmy, że zmieniliśmy nazwę pliku z strona.html na nowa_strona.html. Odwiedzający poprzez link /strona.html domyślnie ujrzeli by błąd o kodzie 404 - nie znaleziono strony. Ustawiając odpowiednią regułę pozwolimy na korzystanie także ze starego adresu.
W tym celu tworzymy plik .htaccess z następującą treścią:
RewriteEngine on
RewriteRule ^strona\.html$ nowa_strona.html
Pierwsza linijka włącza moduł rewrite. W drugiej natomiast informujemy serwer, iż przy próbie dostępu do pliku strona.html powinna zostać wyświetlona zawartość pliku nowa_strona.html
Wyrażenie dotyczące starej strony to najtrudniejsza rzecz w zrozumieniu tej reguły.
Widzimy w nim trzy znaki specjalne:
Po umieszczeniu tego kodu i otworzeniu pliku strona.html ukaże się nam zawartość nowa_strona.html. Odwiedzający nie zauważy żadnej różnicy.
W opisanym wcześniej przypadku użytkownik odwiedzający stronę nie zauważy zmiany adresu. Możliwe jest zastosowanie tzw. przekierowania - wówczas do przeglądarki zostanie wysłany nakaz odświeżenia adresu w przeglądarce oraz odwiedzenia już nowej strony.
W tym celu na końcu reguły zaprezentowanej powyżej należy dopisać ciąg [R].
RewriteRule ^strona\.html$ nowa_strona.html [R]
Przekierowania zaawansowane używające wyrażeń regularnychTeraz poznamy naprawdę użyteczne narzędzie. To w nim tkwi cała potęga mod_rewrite.
Jeśli to Twoja pierwsza przygoda z wyrażeniami regularnymi, ich zrozumienie może nastręczyć na początku wielu trudności. Ułatwią Ci to przedstawione przykłady.
Używając wyrażeń regularnych możemy automatycznie przepisać wiele adresów w tym samym momencie.
RewriteRule ^produkty/([0-9][0-9])/$ /informacje.php?ID=$1
Powyższa reguła przechwyci wszystkie adresy rozpoczynające się od ciągu "produkty/12/" następnie dwie cyfry i znak "/". Przykładowo "produkty/12/" oraz "produkty/99/" przeniosą nas do naszego skryptu.
Części w nawiasach kwadratowych to tzw. zakresy. W naszym przypadku są to cyfry od 0 do 9. Inne ich przykłady to [A-Z] - wielkie litery, [a-z] - małe litery, [A-Za-z] - wszystkie litery bez względu na wielkość.
Umieściliśmy wyrażenie regularne w nawiasach, gdyż zamierzamy wszystkie pasujące do danego wzorca wartości zachować do późniejszego użycia. W tym przypadku przekazujemy je do skryptu PHP jako argument.
Każda para nawiasów z wyrażeniami umieszczana jest w odpowiedniej zmiennej. Jej nazwą jest kolejny numer nawiasu poprzedzony znakiem dolara. Przykładowo, pierwszy oznaczony fragment będzie dostępny pod $1, trzeci pod $3 itp. Po wywołaniu adresu "produkty/12/" przeglądarka wyświetli zawartość strony będącej rzeczywiście pod adresem "informacje.php?id=12". Oczywiście ten adres zostanie ukryty przed odwiedzającym.
Gdy w opisanym we wcześniejszym przykładzie przypadku użytkownik wpisze adres w postaci "produkty/12" (pomijając końcowy ukośnik) to serwer zwróci błąd, gdyż nie posiada reguł przechwytujących takie zachowania.
Aby temu zapobiec, zastosujemy na początku regułę przekierowującą wszystkie żądania bez końcowego ukośnika dołączając go do nowego adresu.
RewriteRule ^produkty/([0-9][0-9])$ /produkty/$1/ [R]
W wielokrotnych przekierowaniach na naszych serwerach istotna jest kolejność reguł, zgodnie z kolejnością linii pliku .htaccess. Podana przez nas reguła musi być dopisana linijkę przed opisaną we wcześniejszym rozdziale.
Całość wygląda następująco:
RewriteRule ^produkty/([0-9][0-9])$ /produkty/$1/ [R]
RewriteRule ^produkty/([0-9][0-9])/$ /informacje.php?ID=$1
Gdy użytkownik odwiedzi adres "produkty/21", to w pierwszej kolejności zostanie przekierowany na "produkty/21/", po czym zostanie mu zaprezentowana zawartość pliku informacje.php?ID=21.
Obecnie w kodzie reguły zdefiniowaliśmy na stałe ilość znaków wymaganych w linku.
Wywołanie "produkty/1/" jak również "produkty/100/" zakończy się błędem.
Aby nie definiować określonej ilości znaków potrzebnych do reguły, stosujemy tzw. modyfikatory. Spójrzmy na poniższą regułę:
RewriteRule ^products/([0-9]+)/$ /informacje.php?ID=$1
Po zakresie pojawił się modyfikator - znak plusa (+). Oznacza on, iż wymagany jest co najmniej jeden znak z danego zakresu. W tym przypadku pasować będzie do niego zarówno "produkty/1/" jak i "produkty/1000/"
Innymi modyfikatorami są: gwiazdka (oznaczająca zero lub więcej elementów zakresu) i znak zapytania (zero lub jeden znak z zakresu)
Dzięki wykorzystaniu mod_rewrite możemy utworzyć "skróty" do często używanych obszarów stron WWW.
Zakładamy, iż większość odwiedzających stronę sklepu z odzieżą z zamiarem kupienia spodni wpisze do przeglądarki:
www.firma.pl/spodnie
Jednakże oprogramowanie naszego sklepu wymaga linków w postaci:
www.firma.pl/odziez/spodnie
Korzystając z poniższej reguły:
RewriteRule ^spodnie(/)?$ /odziez/spodnie/ [R]
Wymusimy na odwiedzających przekierowanie do nowego adresu.
ZakończenieW niniejszym kursie zaprezentowane zostały jedynie podstawy modułu rewrite. Więcej informacji można znaleźć pod adresami:
Copyright © 2002-2010 dhosting.pl. Wszelkie prawa zastrzeżone.