mod_rewrite w praktyce - przyjazne, krótkie adresy URL
Moduł mod_rewrite pozwala na tworzenie krótszych adresów - przyjrzyjmy mu się bliżej.
Jak powszechnie wiadomo, na stronach internetowych warto udostępniać użytkownikom nawigację (nie zgubią się pośród wielu kategorii, podstron itd). Poza tym warto zadbać o prostą konstrukcję adresów URL - jak wspomniałem wcześniej - ze względu na użytkownika i wyszukiwarki.
Serwer Apache udostępnia moduł mod_rewrite. Umożliwia on przy minimalnym nakładzie pracy, uzyskanie efektu który zająłby normalnie więcej czasu. Dokładniej chodzi o "przepisywanie linków" - czyli na przykład zamiana formy /?d1=artykul&id=4543oje na następującą /artykul/tytul-newsa/.
Tworzymy plik o nazwie .htaccess. Wklejamy do niego niżej wymieniony kod, w ten sposób informujemy serwer jaką operację planujemy wykonać.
Options FollowSymLinks
RewriteEngine On
Przepisywanie: adres-strony.pl na www.adres-strony.pl
Następnie tworzymy przekierowanie - użytkownicy którzy weszli na stronę bez przedrostka "www" zostaną przeniesieni na taką.
RewriteCond %{HTTP_HOST} ^adres-strony.pl
RewriteRule (.*) http://www.adres-strony.pl/$1 [R=301,L]
"Ręczne" przepisywanie
Dla przykładu z postaci podstrona.php na podstrona.html. Zmieniając rozszerzenia plikom ułatwimy indeksowanie witryn robotom wyszukiwarek. Patrząc na posunięcia większości znanych witryn i portali, bardziej korzystne i naturalne będzie rozszerzenie ".html" niż takie ".php".
RewriteRule ^podstrona.html$ podstrona.php [L]
- podstrona.php - obecny adres
- podstrona.html - adres który chcemy uzyskać
Dynamiczne przepisywanie
Dla przykładu z postaci "http://adres-strony.pl/?d1=artykuly&d2=informacje" na "http://adres-strony.pl/artykuly/informacje.html". Zobaczmy jak zmienić adres do postaci bardziej czytelnej, prostej i przyswajalnej. Warto wspomnieć że omawiana "zamiana" będzie dokonywana w sposób automatyczny, bez konieczności ingerencji użytkownika (nie będzie trzeba wprowadzać osobno każdej podstrony).
RewriteRule ^(.+)/(.+).html$ index.php?d1=$1&d2=$2 [L]
Powyższy przykład zmieni index.php?d1=wartosc1&d2=wartosc2 na /wartosc1/wartosc2.html. Natomiast poniższy z index.php?d1=wartosc1 na /wartosc1.html.
RewriteRule ^(.+).html$ index.php?d1=$1 [L]
Jeżeli po wysłaniu pliku .htaccess na serwer pojawi się błąd treści "Interial Server Error" oznacza to, że serwer nie obsługuje przepisywania adresów url (mod_rewrite).
Kategorie: PHP + MySQL. Tagi: #cms, #htaccess, #php. Źródło obrazków: Pixabay, Font awesome.