Mod Rewrite
Atrybuty reguł
Do każdej reguły możemy dodać odpowiednie flagi, umieszczane na końcu w nawiasach kwadratowych. Gdy chcemy wprowadzić kilka flag nie wprowadzamy ich osobno: [NC][L], lecz oddzielamy przecinkiem wewnątrz jednego nawiasu, przykład: [NC,L]
A oto szczegółowa lista flag jakie możemy stosować w naszych regułach przepisywania. Szczególne podziękowania za wpis na licencji creative common na 4programmers.net.
- Znacznik [NC] (nocase)
Sprawia, że w danym wzorcu pomijane są różniece w wielkościach znaków. Dla przykładu, dwa poniższe wzorce mają identyczne działanie:
RewriteRule ^([A-Za-z])/?$ web.php?q=$1
RewriteRule ^([a-z])/?$ web.php?q=$1 [NC] - Znacznik R[=kod] (redirect)
Znacznik ten powoduje formalne przekierowanie wraz z podaniem kodu stanu HTTP, domyślnie powoduje on wysłanie kodu HTTP 302 Moved Temporarily. Przykład:
RewriteRule ^art/(d+)/?$ art.php?id=$1 [R=301]
Kod w powyższym przykładzie to 301 Moved Permanently.
Używając tego znacznika można zwracać dowolny kod HTTP z zakresu od 300 do 400. - Znacznik F (forbidden)
Działa podobnie do znacznika redirect, ale od razu wysyła odpowiedź HTTP 403. Jeżeli w ramach jednej reguły znajdzie się ten znacznik oraz redirect, to pierwszeństwa na znacznik forbidden, co oznacza, że zostanie wysłany kod 403 niezależnie od wartości kodu redirect. - Znacznik G (gone)
Znacznik ten wysyła kod HTTP 410 - Usunięto, który informuje użytkownika o tym, że żądana strona została usunięta. Ma on pierwszeństwo przed znacznikiem redirect, ale ważniejszym od niego jest forbidden. - Znacznik L (last)
Znacznik ten pozwala na zatrzymanie przetwarzania reguł RewriteRule po skutecznym dopasowaniu adresu URL do reguły. - Znacznik N (next)
Znacznik next ponownie rozpoczyna proces przepisywania adresu od samego początku listy reguł. W momencie rozpoczęcia ponownego przetwarzania reguł obsługuję one juz nie oryginalny adres URL, ale jego postać przepisano przez wszystkie reguły do momentu pojawienia się znacznika next. - Znacznik C (chain)
Jeżeli chcielibyśmy traktować blok reguł jako jednostkę, to powinniśmy posłużyć się znacznikiem chain. Wytłumaczmy to na przykładzie:
Rewrite Rule ^art/(d+)/?$ art.php?id=$1 [C]
RewriteRule ^cat/(w+)/?$ cat.php?cat=$1 [C]
RewriteRule ^art/[^d+]/?$ error.php
Jeżeli żadna z reguł związanych znacznikiem chain nie pasuje to przechodzimy do ostaniej. - Znacznik S=liczba (skip)
Ten znacznik powoduje pominięcie podanej liczby reguł. Znacznik ów zachowuje podobnie się do chain, z tą różnicą, że pozwala pominąć reguły w przypadku udanego dopasowania. - Znacznik T=typ-mime (type)
W przypadku kiedy chcemy zmienić typ MIME wysyłanego dokumentu, to możemy posłużyć się tym znacznikiem. Na przykład jeżeli mamy pliki xhtml i chcielibyśmy wysłać je za pomocą poprawnego typu MIME (application/xhtml+xml) to możemy wykorzystać tą regułę:
RewriteRule ^.+.xhtml$ - [T=application/xhtml+xml] - Znacznik CO=nazwa:wartość:domena[:czaszycia[:sciezka]] (cookie)
Znacznik ten służy do utworzenia ciasteczka w przeglądarce użytkownika . Wymagane są pola nazwa, wartość i domena. Możemy na przykład utworzyć ciasteczko o nazwie bylemtu, istnienie którego będzie oznaczało że użytkownik już odwiedzał naszą stronę.
RewriteRule ^index.php$ - [CO=bylemtu:true:domena.pl] - Znacznik E=zmienna:wartosc (env)
Znacznik ten pozwala nadać wartość zmiennej środowiskowej zmienna. W jednej grupie znaczników można przypisać wartości do wielu zmiennych środowiskowych. - Znacznik QSA (qsappend)
W przypadku obecności tego znacznika mechanizm przepisywania pobierze oryginalny ciąg znaków zapytania i dopisze do niego ciąg znaków wygenerowany przez regułę.
RewriteRule ^index.php$ index.php?zmienna=wartosc [QSA]
Jeżeli tej regule podamy adres postaci index.php?cos=bla to w wyniku jej działania otrzymamy index.php?zmienna=wartosc&cos=bla. - Znacznik NE (noescape)
Znacznik ten pomaga unikać automatycznego wyróżniania znaków specjalnych. - Znacznik PT (passtrough)
Używamy go w momencie kiedy chcemy połączyć moduł mod_rewrite z innymi moduła, które również zajmują się obsługą adresó URL. - Znacznik NS (nosubreq)
Znacznik ten używamy w momencie jeżeli chcemy aby mechanizm przepisywania adresów pominął regułę, jeżeli żądanie jest wewnętrznym żądaniem podrzędnym. Bardzo rzadko jest używany, jezeli korzystamy z Apache i PHP, przydaje się w momencie dołączenia skryptów CGI. - Znacznik P (proxy)
Nakazuje on zakończenie przetwarzania reguł i przekazanie danych żądania do modułu mod_proxy.

