- Informacje o korzystaniu z wyrażeń regularnych.
- Co się stanie jeśli użytkownik wpisze adres URL bez kończącego go znaku slash „/”?
- Jak ustrzec się przed zapętleniem reguł?
- Wymuszanie adresu domeny z lub bez przedrostka „www.” lub „http://”.
Korzystanie z wyrażeń regularnych
RewriteEngine On RewriteRule ^sklep/([0-9][0-9])/$ sklep.php?id=$1
sklep/23/ -> sklep.php?id=23
Parę słów rozwinięcia:
- znaki ^ oraz $ informują o dopasowywaniu od początku do końca tekstu źródłowego. Jeśli je pominiemy, wyrażenie regularne będzie szukać wystąpienia tekstu w dowolnym miejscu tekstu. Dla przykładu:
tekst: /produkty/promocja/koszulka/czerwona maska: ^/promocja/$ wynik: BŁĄD – nie znaleziono szukanej treści. Według naszej maski podany na wejściu tekst powinien zawierać tylko frazę "/promocja/" i nic więcej.tekst: /produkty/promocja/koszulka/czerwona maska: /promocja/ wynik: SUKCES – w szukanym tekście występuje fraza "/promocja/".
- [0-9] – oznacza jeden znak z podanego zakresu znaków,
- (…) – nawiasy te służą grupowaniu. Wartość wyrażenia dopasowania w nawiasach jest przekazywana jako parametr – można ją wypisać używając $1 do $9.
Kolejny przykład:
RewriteEngine On RewriteRule ^artykul/([a-zA-Z]+)/$ /wyswietl.php?artykul=$1
Oto przykłady:
tekst: /artykul/MalyTytul/ wynik: /wyswietl.php?artykul=MalyTytul
tekst: /artykul/123/ wynik: błąd dopasowania (tytuł artykułu nie zawiera liter).
Nawiązując do przykładu z pierwszego rozdziału, możemy stworzyć już regułę, która zrealizuje to przepisanie. Przypomnijmy:
RewriteEngine On RewriteRule ^nowosci/([0-9]+)$ /wyswietl.php?id=$1
http://moja-strona.home.pl/nowosci/3487
Adres fizyczny (nieprzyjazny), który prowadzi do tej samej zawartości:
http://moja-strona.home.pl/wyswietl.php?id=3487
Dodawanie kończącego znaku slash „/”
RewriteEngine On RewriteRule ^artykul/([a-zA-Z]+)$ /artykul/$1/ [R] RewriteRule ^artykul/([a-zA-Z]+)/$ /wyswietl.php?artykul=$1
Co się stanie po wywołaniu adresu „/artykul/DuzyTytul„?
-
Zostanie wykonana pierwsza reguła, która zamieni adres na postać „/artyklul/DuzyTytul/” oraz wykona przekierowanie na tą stronę (o tym mówi flaga R).
-
Nowy adres nie zostanie już dopasowany do pierwszej reguły, więc serwer spróbuje go dopasować do kolejnej reguły – co zakończy się sukcesem.
Jak ustrzec się przed zapętleniem reguł?
Przykład zapętlającej reguły:
RewriteEngine On RewriteRule (.*) /pokaz.php/$1
- Pierwszy przebieg:
- tekst: artykuly/478
- wynik: /pokaz.php/artykuly/478
- Drugi przebieg:
- tekst: /pokaz.php/artykuly/478
- wynik: /pokaz.php/pokaz.php/artykul478
RewriteEngine On RewriteRule ^([^.]*)$ /pokaz.php/$1
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) /pokaz.php/$1
Wymuszanie adresu domeny z lub bez przedrostka „www.” lub „http://”
Więcej informacji na ten temat znajdziesz w tym artykule.
Jakie artykuły na temat mod_rewrite znajdę w dokumentacji home.pl?
- Informacje podstawowe na temat przepisywania linków – mod_rewrite
- Reguły przepisania w mod_rewrite
- Dodatkowe warunki dopasowania w mod_rewrite
- Przekierowanie 301 w pliku .htaccess
- Zmienne środowiskowe na serwerze w home.pl
Dedykowane wsparcie IT i megarabaty!
Pomoc Premium dedykujemy najbardziej wymagającym Klientom home.pl. Powiedz, co możemy dla Ciebie zrobić i oszczędzaj czas.