16 sierpnia 2016

Atrybuty reguł mod rewrite

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 znacznikforbidden, 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łumod_proxy.