Zaawansowane przykłady rozwiązań w mod_rewrite

Najlepszy hosting dla stron WWW

Szybki hosting dla WordPressa

Korzystanie z wyrażeń regularnych

Potęga funkcjonalności mod_rewrite wiąże się z możliwością tworzenia zaawansowanych wzorców składni. Im bardziej zawiłe przepisanie tym bardziej złożone będzie wyrażenie regularne. Dlatego też, aby w pełni korzystać z możliwości mod_rewrite, musisz opanować korzystanie z wyrażeń regularnych. Poniżej znajdziesz kilka przykładów, które bazują na rozwiniętych wyrażeniach.
RewriteEngine On
RewriteRule ^sklep/([0-9][0-9])/$ sklep.php?id=$1
Pierwszy parametr to nasza maska. Mówi ona o tym, że sprawdzany ciąg znaków zaczyna się od “sklep/” i po nim występują dwie cyfry, np: “sklep/23/“. Okrągłe nawiasy służą do grupowania. Tekst dopasowany w nawiasach może być przekazany jako parametr dla docelowego prostego adresu. Czyli w rezultacie z działania tej reguły nastąpi przepisanie:
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
Jest to bardzo podobny przykład do poprzedniego. Tym razem w masce dopasowania sprawdzamy, czy tekst zaczyna się od frazy “artykul/“, po której spodziewamy się znaleźć tytuł artykułu. W tym celu użyliśmy grupowania zakresu małych i dużych liter. Znak plusa informuje, że może wystąpić jedna lub wiele liter.

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
Przyjazny link, obsługiwany przez reguły mod_rewrite:
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 “/”

Patrząc na te przykłady możesz powiedzieć – wszystko dobrze, tylko co w przypadku, kiedy użytkownik wpisze adres URL bez kończącego go slasha? Mam robić osobne reguły dla każdego przypadku? Nie, nie ma takiej konieczności!

 

Pamiętaj, że po każdym wykonanym przepisaniu strona WWW jest wywoływana ponownie, z nowym adresem URL. I co się z tym wiąże, ponownie są przetwarzane reguły mod_rewrite. Rozbudujmy więc ostatni przykład:
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“?

  1. 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).
  2. 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.
WAŻNE! Pamiętaj, że niepoprawne reguły powodujące zapętlenia są najczęstszym błędem.

Jak ustrzec się przed zapętleniem reguł?

Przede wszystkim należy pamiętać, że po przepisaniu adresu, następuje ponowne wywołanie strony – już z nowym adresem. Po ponownym załadowaniu strony zostają ponownie wykonane reguły zapisane w pliku .htaccess. Należy więc tak konstruować reguły, aby nie zaszedł przypadek, kiedy raz przepisany adres jest przepisywany ponownie przez tą samą regułę w nieskończoność.

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
Jak widać, reguła ta będzie wykonywać się w nieskończoność. Oto poprawiona wersja, która opiera się na sprawdzeniu, czy przepisywany adres nie zawiera kropki:
RewriteEngine On
RewriteRule  ^([^.]*)$  /pokaz.php/$1
Pierwszy przebieg wygląda podobnie jak w poprzednim przykładzie, natomiast drugi zwróci błąd, gdyż przepisywany tekst zawiera już kropkę. Dlaczego wymuszamy przepisanie tekstu który nie zawiera kropki? W normalnym przypadku kropka pojawia się tylko w nazwie pliku – w tym przypadku jest to “pokaz.php”. Inną metodą jest użycie narzędzia RewriteCond w celu sprawdzenia, czy adres nie zawiera rzeczywistego katalogu i nazwy pliku – jeśli tak, oznacza to, że posiadamy już adres w ostatecznej postaci.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule  (.*) /pokaz.php/$1
Oba dopasowania RewriteCond sprawdzają zawartość wywołanego adresu – pierwsze sprawdza, czy adres nie prowadzi do pliku (parametr -f), natomiast drugie czy nie jest to katalog (parametr -d). Po pierwszym przebiegu i wykonaniu reguły zmienna REQUEST_FILENAME będzie zawierać już nazwę pliku (tj. “pokaz.php”).

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?

Bezpieczny hosting dla Twojej strony WWW

Przygotowaliśmy miejsce, w którym Twoja strona WWW i poczta e-mail będą się czuły komfortowo.


Hosting stworzony dla WordPressa

Masz stronę WWW na WordPressie? My też uwielbiamy ten system dla stron internetowych. Dlatego stworzyliśmy hosting specjalnie dla jego użytkowników.


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.

Poznaj Pomoc Premium Sprawdź ofertę

  • Czy artykuł był pomocny ?
  • Tak   Nie
Szukaj
Generic filters
Tylko dokładne dopasowania
Szukaj w tytułach
Szukaj w treści
Filter by Article Categories
Najczęściej zadawane pytania
Dodatkowe narzędzia hostingu
Statystyki serwera (nowe)
Połączenie SSH
Statystyki serwera (stare)
WebFTP
Autoinstalator
Kontrola wersji (SVN)
Listy mailingowe
Poczta home.pl
Obsługa poczty webmail
Programy pocztowe
Nowa platforma home.pl
Częste pytania
Bezpieczeństwo
Instalacje
Panel klienta
Domeny
Hosting
Serwer Apache
Bazy danych
Certyfikaty SSL
Zamawianie SSL
Instalacja i konfiguracja SSL
Poczta e-mail
Office 365
WordPress Hosting SSD
Dodatki od partnerów
Poprzednia platforma home.pl
Certyfikaty SSL
Zamawianie certyfikatów SSL
Konfiguracja i instalacja SSL
Panel home.pl
Informacje podstawowe
Pulpit
Usługi
Płatności
Profil
Centrum Pomocy
Operacje w Panelu home.pl
Serwery
WebFTP
Informacje podstawowe
Konfiguracja serwerów
Serwery Unix
Serwery Windows
Obsługa baz danych
phpMyAdmin (MySQL)
phpPgAdmin (PgSQL)
myLittleAdmin (MSSQL)
Sklep internetowy eSklep
Panel usługi eSklep
RODO w sklepie internetowym
Panel sklepu internetowego
Pierwsze kroki
Promocja sklepu
Sprzedaż
Pierwsze uruchomienie
Dodatki od partnerów
Asortyment
Klienci
Integracje
Inne integracje
Systemy aukcyjne
Baza produktów
Aplikacje
App store
Aplikacja mobilna
Marketing
Modyfikacja wyglądu
Dokumentacja
Dla deweloperów
Style graficzne
Inne zagadnienia
Raporty i statystyki
Zawartość
Filmy instruktażowe
Konfiguracja sklepu
Rozliczenia i dokumenty
Faktury
Zmiana danych (cesja)
Rozliczenia i płatności
Dokumenty do pobrania
Produkty i usługi
Kreator Stron WWW
eCommerce
Moduły
Ustawienia
Szablony
Nawigacja
Publikacja i dodatki
Szybki start
Prestahosting
Profesjonalne usługi IT
Certyfikaty SSL
Przywracanie danych
Udostępnienie logów
Operacje na plikach i bazach danych
WordPress
Terminal płatniczy SumUp
Wordpress hosting SSD
Office 365
OneDrive
Domeny
Informacje podstawowe
Rejestracja / opłacanie
Konfiguracja domen
Transfer domen
Giełda domen
Dodatki do domen
Serwery VPS
Skrzynki e-mail
Microsoft Exchange
Cloud Email Xchange
Obsługa skrzynek w Panelu home.pl
Jak zarejestrować Personal email lub Business email?
Bezpieczeństwo
eKsięgowość
Reklama internetowa
Reklama Allegro Ads
Tworzenie stron WWW
Contact LEADer
Reklama banerowa Google
Zakupy Google
Google Ads (AdWords)
eKampanie Google
SEMSTORM
Pozycjonowanie
rankingCoach
Baza wiedzy
Facebook
Systemy CMS
Internet w praktyce
Przydatne programy
Konfiguracja programów FTP
Zagadnienia techniczne
.htaccess
mod_rewrite
Kursy i specyfikacje
Kurs HTML
Kurs PHP
Kurs SQL
Rejestracja usług
RODO w home.pl
English
Control Panel
Webmail
FTP
Office 365
WordPress
SSL
Aplikacje w marketplace
SimplySign
SiteLock - ochrona WWW
Dropsuite Email Backup
CCleaner
Antywirus Kaspersky
Dropbox - dysk w chmurze
Płatności PayU
Programy antywirusowe AVAST
Office 365
AVG PC TuneUp
Reklama na start
Google AdWords
Zareklamuj stronę WWW na Facebook
Cloud Email Xchange
Brand24
Microsoft OneDrive
FreshMail.pl
Tłumaczenia online
G Suite - poczta Gmail
Program prowizyjny
Acronis Backup
Informacje podstawowe
Ustawienia dodatkowe
Panel użytkownika
Panel administratora
lub