Moduł mod_rewrite, w który wyposażony jest serwer Apache, służy między innymi do budowy tzw. przyjaznych linków. Jego zastosowanie znacznie wpływa na pozycjonowanie serwisu jak i na czytelność adresów podstron serwisu. W zamian za brzydki, zapełniony zmiennymi adres podstrony (np. index.php?mode=gallery&id=3&subid=19) możemy zyskać adres postaci: gallery/3/9 lub gallery,3,9.html. Jak widać jest on adresem krótszym, łatwiejszym do zapamiętania i wpisania – po prostu przyjaznym.
Korzystając z tego przykładu pokażemy jak w prosty sposób budować przyjazne linki.
Do budowy przyjaznych linków potrzebujemy dwóch rzeczy:
- – przynajmniej minimalnej znajomości wyrażeń regularnych:
Wyrażenia regularne stosowane są do opisu reguł przyporządkowania łańcuchów znakowych.
- – serwera z obsługą mod_rewrite:
Aby sprawdzić czy serwer obsługuje mod_rewrite wystaczy skorzystać z funkcji phpinfo(). Wyświetli ona informację o obsługiwanych modułach (choć w sporadycznych przypadkach zdarzyć się może, iż mod_rewrite nie jest aktywny, mimo iż jest na liście załadowanych modułów). Większość firm hostingowych (największe: home.pl, nazwa.pl, IQ, Kei) od razu udostępnia obsługę tego modułu.
Oto instrukcje pliku .htaccess umożliwiające działanie takich przyjaznych linków:
RewriteEngine On
RewriteBase /
RewriteRule ([a-zA-Z0-9-_]+)/([0-9]+)/([0-9]+)/ /index.php?mode=$1&id=$2&subid=$3 [L]
RewriteRule ([a-zA-Z0-9-_]+),([0-9]+),([0-9]+).html /index.php?mode=$1&id=$2&subid=$3 [L]
Pierwsze dwie linie instruują Apache’, że uruchamiamy moduł mod_rewrite. Druga linia, nie zawsze potrzebna, wskazuje na podkatalog domeny w jakim następuje przepisywanie adresów. Jeśli posiadasz hosting na serwerach Nazwa.pl jest ona potrzebna, na innych serwerach niekoniecznie.
Kolejne dwie linie to instrukcje przepisania adresów podstron. Omówię po kolei poszczególne bloki instrukcji wg schematu:
RewriteRule maska_przepisania docelowy_adres [opcje]
RewriteRule ([a-zA-Z0-9-_]+)/([0-9]+)/([0-9]+)/ /index.php?mode=$1&id=$2&subid=$3 [L]
Ten człon polecenia wskazuje na polecenie przepisania adresu. Musi się on zawsze pojawić na początku linii opisującej wzór przepisania.
RewriteRule ([a-zA-Z0-9-_]+)/([0-9]+)/([0-9]+)/ /index.php?mode=$1&id=$2&subid=$3 [L]
RewriteRule ([a-zA-Z0-9-_]+),([0-9]+),([0-9]+).html /index.php?mode=$1&id=$2&subid=$3 [L]
Kolejnym elementem polecenia jest opis wzoru adresu za pomocą wyrażeń regularnych. Dokładny ich opis można znaleźć w internecie, tutaj podamy tylko podstawowe informacje korzystając z pierwszego wyrażenia ([a-zA-Z0-9-_]+):
- – okrągłe nawiasy () wydzielają poszczególne wyrażenia regularne,
- – nawiasy kwadratowe [] natomiast wydzielają poszczególne grupy znaków,
- – blok znaków: a-zA-Z0-9-_ wskazuje znaki jakie mogą być użyte w danej grupie znaków. W tym przykładzie mogą to być małe litery a-z, duże litery A-Z, cyfry 0-9 oraz myślnik i podkreślnik. Jak widać na przykładzie kolejne podgrupy wymieniamy po sobie. Oprócz takiego zapisu, jeśli chcemy bardziej ograniczyć zakres znaków możemy wypisać poszczególne znaki, np.:
- abcdef – jeden ze znaków a-f,
- ^d – każdy znak inny niż d,
- . – dowolny znak.
- znak kontrolny + oznacza krotność znaków w danej grupie:
- + – jeden lub więcej znaków w bloku,
- * – zero lub więcej znaków w bloku,
- {1,3} – jeden, dwa lub trzy znaki w bloku.
- pozostałe znaki (np. .html) podajemy wprost w postaci jawnej. Jak widać wyżej w przykładzie przed kropką znajduje się znak . Służy on do oznaczania znaków specjalnych (. [ ] ( ) { } ), które bezpośrednio za uważane są jako „normalne” znaki.
RewriteRule ([a-zA-Z0-9-_]+)/([0-9]+)/([0-9]+)/ /index.php?mode=$1&id=$2&subid=$3 [L]
Kolejny blok wskazuje sposób przypisania poszczególnych wyrażeń regularnych do zmiennych w oryginalnych adresach. Kolejność zmiennych ustala się podając kolejne liczby w znakach: $1, $2, $3 itd. Jeżeli kolejność zmiennych w przyjaznym linku różni się od adresu pierwotnego oznaczamy ich kolejność wpisując w kolejności np. $3, $1, $2.
RewriteRule ([a-zA-Z0-9-_]+)/([0-9]+)/([0-9]+)/ /index.php?mode=$1&id=$2&subid=$3 [L]
Podczas tworzenia przyjaznych linków opcje mogą przyjąć takie wartości jak:
- L – od ang. Last – po znalezieniu pasującej instrukcji RewriteRule serwer wykona przepisanie i zacznie sprawdzać plik .htaccess od początku. Jeśli pominiemy tą opcję serwer po przepisaniu adresu będzie sprawdzał plik .htaccess do końca.
- NC – od ang. Not Case sensitive – pomijane jest sprawdzanie wielkości liter.
Dzięki użyciu przyjaznych linków możemy osiągnąć kilka korzyści:
-
Lepsze pozycjonowanie serwisu – linki przyjazne wyszukiwarkom,
-
Łatwiejsze do zapamiętania adresy podstron – linki przyjazne użytkownikom internetu,
-
Częściowo ukrywamy strukturę serwisu utrudniając możliwy włam – linki przyjazne webmasterom.