mod_rewrite w praktyce - przyjazne, krótkie adresy URL

Data aktualizacji: 22.04.2024r. Autor: Bartosz Stefanicki.

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.

Zobacz także

10 komentarzy