Mod_rewrite korzysta z wyrażeń regularnych, oto najważniejsze z nich:
. Dowolny znak
^ Oznacza początek napisu
$ Oznacznik końca (c$ znaczy, że ciąg tekstowy musi zakończyć się na c)
+ Wystąpi jeden lub więcej razy
* Zero lub więcej wystąpień
? Zero lub jedno wystąpienie
! Negacja wyrażenia
( Rozpoczyna grupowanie (przetwarzanie ciągu znaków, jakby był to pojedynczy element)
[ Rozpoczyna klasę znaków, np. dopasowane do przedziału od 0 do 9, to definicja klasy [0-9]
^ Oznacza początek napisu
$ Oznacznik końca (c$ znaczy, że ciąg tekstowy musi zakończyć się na c)
+ Wystąpi jeden lub więcej razy
* Zero lub więcej wystąpień
? Zero lub jedno wystąpienie
! Negacja wyrażenia
( Rozpoczyna grupowanie (przetwarzanie ciągu znaków, jakby był to pojedynczy element)
[ Rozpoczyna klasę znaków, np. dopasowane do przedziału od 0 do 9, to definicja klasy [0-9]
Przykładowy wpis do .htaccess może wyglądać tak:
RewriteEngine on
RewriteRule ^index.html$ index.php [L]
RewriteRule ^index.html$ index.php [L]
Pierwsza linia powoduje uruchomienie mod-rewrite, natomiast w drugiej widzimy już użycie wyrażeń regularnych. Taki zapis oznacza, że jeżeli na serwerze mamy plik index.php to możemy się również do niego odnieść wpisując index.html. Jeżeli chodzi o atrybut [L] to jest to skrót od Last rule i oznacza on, że linia w której się znajduję jest ostatnią linią, czyli kolejne reguły nie będą dalej wykonywane. Dodatkowo możemy dopisać atrybut [NC], który oznacza że to czy adres będzie wpisany dużymi literami czy małymi nie robi żadnego znaczenia, tak więc wpisując
domeda.com/STRONA1/index.php
otrzymamy to samo co przy wpisie domeda.com/strona1/index.php
.Teraz zajmijmy się już konkretnymi przykładami. Załóżmy, że nasza strona znajduję się pod takim adresem:
www.strona.pl/menu.php?id=4
. Aby adres był czytelny dla użytkownika dobrze jakby był takiego formatu: www.strona.pl/menu-4
. Aby otrzymać taki wynik wystarczy dodać do .htaccess następującą linkijkę: RewriteRule ^menu-([^-]+).html$ menu.php?id=$1
. Teraz po kolei wyjaśnię ten zapis: ([^-]+) oznacza wszystkie znaki z wyjątkiem myślnika, w takim przypadku za wykluczenie odpowiedzialny jest znak ^, natomiast + oznacza wystąpienie znaku raz lub więcej razy. Jeżeli np. chcemy aby tam były umieszczone wyłącznie liczby to wpisujemy ([0-9]+) . Jeśli chodzi o okrągłe nawiasy oznaczają one zmienne - w tym przypadku to co jest w nawiasie w pierwszej części ciągu jest przenoszone do drugiej części do zmiennej $1 i wyświetlane w URL. Jeżeli nawiasów byłoby więcej to odpowiadałyby one kolejno zmiennym $1 $2 $3 itd.Tutaj bardziej czytelny przykład:
RewriteEngine On
RewriteRule (aktualnosci)/(kraj)/([0-9]+) /wyswietl.php?what=$1&skad=$2&id=$3
#lub
RewriteRule (+)/(+)/([0-9]+) /wyswietl.php?what=$1&skad=$2&id=$3
#lub
RewriteRule ([a-z]+)/([a-z]+)/([0-9]+) /wyswietl.php?what=$1&skad=$2&id=$3
RewriteRule (aktualnosci)/(kraj)/([0-9]+) /wyswietl.php?what=$1&skad=$2&id=$3
#lub
RewriteRule (+)/(+)/([0-9]+) /wyswietl.php?what=$1&skad=$2&id=$3
#lub
RewriteRule ([a-z]+)/([a-z]+)/([0-9]+) /wyswietl.php?what=$1&skad=$2&id=$3
Zamieni on adres http://moja-strona.pl/wyswietl.php?what=aktualnosci&skad=kraj&id=108 na: http://moja-strona.pl/aktualnosci/kraj/108. Po więcej szczegółów odsyłam do dokumentacji Apachea.
Brak komentarzy:
Prześlij komentarz