Mod Rewrite jest genialnym udoskonaleniem wykorzystywania dynamicznie generowanych stron internetowych. Wszyscy wiemy, jakie problemy z indeksacją były w przypadku stosowania adresów z parametrami index.php?id=14&ref=sym. To był problem dla wyszukiwarek, a i dla użytkowników te linki nie wyglądały atrakcyjnie, ciągneły się w nieskończoność i co najgorsze, wszystkie z parametrów mogły być dowolnie przestawiane jeśli chodzi o ich kolejność. To powodowało, że jedna treść była dostępna z wielu adresów URL, co nie jest mile widziane przez wyszukiwarki.

Moduł przepisywania adresów składa się z odpowiednich reguł, które powodują, że odpowiednio spreparowane adresy umożliwiają otwarcie dokumentów z dostępnych normalnie z „brzydkich” adresów. Wszystkie reguły wpisujemy w dokumencie .htaccess który musimy utworzyć na swoim serwerze. Jeśli chcemy testować mod rewrite na swoim domowym komputerze (serwer php localhost) możemy mieć problem z utworzeniem pliku bez nazwy a z rozszerzeniem .htaccess. Aby to zrobić, stwórz jakiś plik np.test.txt. Uruchom TotalCommander, a w nim wskaź plik który utworzyleś i kliknij go pojedyńczo tak by uruchomiła się opcja zmiany nazwy. Usuń całą zawartość tego pola, wpisując zamiast tego kropkę ihtaccess. To jeden z niewielu sposobów by utworzyć plik bez nazwy a rozszerzeniem w systemie Windows.

Dokument rozpoczyna zawsze regułą włączająca, która uruchamia silnik przepisywania adresów:

RewriteEngine On

Reguły są umieszczane tuż pod regułą włączającą. Ich struktura obrazuje się następująco:

RewriteRule [adres jakiego chcemy używać] [prawdziwy adres pliku] [atrybuty/flagi]

Jak pisze autor wpisu (Coldpeer), z którego sam uczyłem się podstaw modrewrite reguły umożliwiają nadanie nieatrakcyjnemu adresowi np. http://adres.com/index.php?kategoria=typowa&artykul=45 o wiele atrakcyjniejszej formy funkcjonującej jak przezwisko. Chodzi o fakt, że nowe adresy które obsługujemy dzięki mod rewrite i tak wczytują stare dokumenty z brzydkich adresów lecz dzieje się to bez wiedzy użytkowników/wyszukiwarki – tak by oni widzieli tylko ładne URL.

I tak, o to przedstawiony w poprzednim akapicie link: http://adres.com/index.php?kategoria=typowa&artykul=45 mógłby prezentować się tak: http://adres.com/typowa/45 – Czyż nie ładniej?

Reguła zmianiająca wyglądała by tak:

RewriteRule ^http://adres.com/([^-]+)/([^-]+)$ index.php?kategoria=$1&artykul=$2 [L]

Kolejne elementy ([^-]+) w pierwszym adresie ulegają dopasowaniu do drugiego „brzydkiego” adresu w kolejności od lewej licząc. Dlaczego drugi ([^-]+) jest reprezentowany przez $2. Na końcu tej pojedyńczej reguły wstawiona została flaga atrybutu. Opisze je w innym podrozdziale. Taka reguła jak powyżej, przy wpisaniu przez użytkownika adresu http://adres.com/tematyczna/77 wczyta mu (bez zmiany w oknie przeglądarki adresu) mu dokument spod URL: http://adres.com/index.php?kategoria=tematyczna&artykul=77

Bardzo ważne jest wprowadzenie w całym swoim serwisie w linkach, które mogą klikać użytkownicy nowego sposobu adresowania. Inaczej pomimo wdrożenia odpowiednich reguł nikt o nich się nie dowie i dalej będzie korzystać ze starych adresów z parametrami.