Jednym z popularniejszych tematów na forach internetowych jest mod_rewrite. Często nawet gdy jakiś serwer nie obsługuje tego modułu, uważa się, że nie warto tam hostować swojej strony.

Data dodania: 2007-04-11

Wyświetleń: 7224

Przedrukowań: 0

Głosy dodatnie: 1

Głosy ujemne: 1

WIEDZA

0 Ocena

Licencja: Creative Commons

Jeśli jednak nie jesteś w temacie, to pewnie nie wiesz, o co w tym wszystkim chodzi i dlaczego jest to taki popularny temat. W tym artykule chciałbym troszkę Tobie przybliżyć to zagadnienie.

Często widuję strony na których jest podstrona o adresie www.costam.pl/ksiazka.php?jaka=1. Taki adres internetowy nie wygląda zbyt przyjźnie. Pewnie dużo ładniej by wyglądał taki adres: www.costam.pl/ksiazka_1.htm. Ten adres nie tylko łatwiej jest zapamiętać zwykłemu internaucie, ale również wyszukiwarki łatwiej go zaindeksują. W pierwszym wypadku jest wywoływany plik index.php z parametrem a w drugim przypadku jest to zwykły plik html. Pierwsze rozwiązanie ma tą zaletę, że plik index.php po otrzymaniu odpowieniego parametru (w tym przypadku 1) może odczytać z bazy danych odpowiednie dane z bazy danych i je wyświetlić. Jest to prostsze niż tworzenie wielu plików statycznych html (i łatwiejsze w zarządzaniu).

A teraz sobie pomyśl co by było, gdyby wmówić serwerowi, że posiadasz plik ksiazka_1.htm i gdy użytkownik wejdzie na tą stronę to tak naprawdę odpali plik index.php z parametrem jaka=1 (zamiast 1 mam na myśli dowolną liczbę, albo nawet ciąg znaków). W tym wypadku łapiesz dwie sroki za jeden ogon - zarówno tworzysz serwis przyjazny dla wyszukiwarek, jak również nie musisz tworzyć wiele plików html. Takie rozwiązanie jest możliwe i to jest ten cały mod_rewrite! Aby serwer wiedział, że chcesz korzystać z mod_rewrite musisz go jakoś o tym poinformować a także wytłumaczyć mu, że jak użytkownik chce wywołać plik ksiazka_.html to tak naprawdę ma być odpalony plik index.php z parametrem jaka=. Aby to zrobić należy utworzyć plik .htaccess (tak, nazwa tego pliku zaczyna się od kropki) o następującej zawartości:

RewriteEngine On
RewriteRule ^ksiazka_(0-9*).htm /index.php?jaka=$1

Pierwsza linijka informuje serwer, że chcesz korzystać z mod_rewrite. Druga linijka to jest owa definicja. ciąg znaków (0-9*) oznacza dowolną liczbę. Gdyby nie było w nim gwiazdki, to owy ciąg znaków oznaczałby jedynie cyfrę. Natomiast $1 oznacza, że w tym miejscu jest wstawiony pierwszy parametr z owego wzorca (tym wzorcem jest liczba, która znajduje się pomiędzy ciągiem znaków ksiazka_ a ciągiem znaków .htm).

Uwaga: pliki .htaccess działają na cały katalog wraz z podkatalogami. Jeśli przykładowo wrzucisz owy plik do głównego katalogu, ale nie chcesz, aby mod_rewrite działało dla jakiegoś podkatalogu, to należy wrzucić do tego podkatalogu plik .htaccess o następującej zawartości:

RewriteEngine Off

Uwaga2: plik .htaccess jest plikiem ukrytym (dla serwerów linuxowych każdy plik którego pierwsza litera w nazwie to kropka jest plikiem ukrytym). Nie wszystkie klienty FTP go pokazują (czasami trzeba włączyć opcję pokazuj pliki ukryte). Dlatego nie przestrasz się, gdy nie zobaczysz tego pliku na serwerze a mod_rewrite działa ;-)

Licencja: Creative Commons