Przyjazne adresy (Friendly URLs)

Elementem, który zaczyna mieć coraz większe znaczenie dla pozycjonowania witryny w wyszukiwarkach jest stosowanie tzw. przyjaznych adresów (ang. Friendly URLs). Przyjazne adresy to takie, które „podobają się” zarówno użytkownikom, jak i wyszukiwarkom. Człowiek może je łatwo zapisać, zapamiętać i przeczytać, a robot wyszukiwarki zidentyfikuje na ich podstawie strukturę serwisu i prawidłowo go zaindeksuje.

Generalnie używanie przyjaznych adresów polega na zamianie adresów postaci:
www.serwis.pl/index.php?zmienna1=a&zmienna2=b
na postać na przykład:
www.serwis.pl/index-a-b

Adresy, w których używa się znaków typu: ?, &, id=… są bardzo mało czytelne i większość internautów ma kłopoty nawet z prawidłowym zapisaniem adresu. Również fragmenty adresów, które związane z technologią, w jakiej wykonana jest strona, czyli .aspx, .html, .php dla przeciętnego użytkownika stanowią dodatkowe utrudnienie, które może zostać wyeliminowane, gdy stosujemy przyjazne adresy.

Przykład mało czytelnego adresu:
www.microsoft.com/details.aspx?FamilyID=34c2ad5-8c3d-8c03-08cdecd8852b&displayLang=en
Przykłady przyjaznych linków:
www.webhosting.pl/Python.kontra.Ruby.walka.do.upadlego
www.fakty.interia.pl/swiat/news/niemcy-atak-nozownika-w-szkole

Kolejną kwestią, oprócz stosowania w adresie URL mało zrozumiałych znaków, jest długość adresu. Większość webmasterów zaleca, aby całkowita długość adresu nie przekraczała 120 znaków, gdyż w przeciwnym razie wyszukiwarki mogą nie wyświetlać całego adresu bądź wyświetlać go w dwóch linijkach, co też nie jest dobrym rozwiązaniem.

Technika stosowania przyjaznych adresów nie jest techniką prostą – wymaga wiedzy z dziedziny PHP, konfiguracji serwera Apache, znajomość struktury linków serwisu oraz podstaw z wyrażeń regularnych, ale warto poświęcić nieco trudu i przekonfigurować serwis tak, aby stosował ten sposób zapisu adresów.

Aby korzystać z możliwości zamiany wyglądu linków musimy mieć możliwość włączenia opcjonalnego modułu mod_rewrite na serwerze Apache. Na serwerach komercyjnych lub darmowych sprawa działania moduł Rewrite będzie zależała od dostawcy usług hostingowych.

Aby zainstalować mod_rewrite na serwerze WWW Apache, należy dokonać edycji jednego z plików konfiguracyjnych serwera. Najlepszym sposobem uruchomienia mod_rewrite jest wykorzystanie pliku httpd.conf, ponieważ jest on uruchamiany podczas każdego uruchamiania serwera. Aby włączyć moduł, należy w pliku httpd.conf w sekcji:
Dynamic Shared Object (DSO) Support
wpisać:
LoadModule rewrite_module modules/mod_rewrite.so

Jeśli nie mamy dostępu do pliku konfiguracyjnego należy wykorzystać plik .htaccess. Zastosowanie tego pliku jest bardzo szerokie - pozwala, bowiem na zmianę pewnych ustawień serwera Apache tylko dla serwisu, w którym plik ten się znajduje. Aby włączyć mod_rewrite przy pomocy .htaccess na początku pliku umieszczamy kod:
Options FollowSymLinks
RewriteEngine On

Następnie należy napisać odpowiednie reguły, które tak naprawdę są aliasami do poszczególnych linków naszego serwisu. Po ich napisaniu nadal możemy się odwoływać do pierwotnych linków jak również nowych aliasów. Ogólną składnię takiej reguły można zapisać następując:
Rewrite <wzór> <zapisz_jako>

Przykład:
RewriteRule ^index.html$ index.php [L]
Wyjaśnienie:
RewriteRule - oznacza ze dalej będzie reguła przepisania adresu
^index.html$ - to co chcemy uzyskać
index.php - to, co było do tej pory
[L] – oznacza zatrzymanie procesu zamiany linków żadna reguła niżej nie zostanie zastosowana

Nieco bardziej skomplikowanie wyglądają przypadki z jedną lub kilkoma zmiennymi w adresie. Załóżmy, że adres, który należy przekształcić wygląda w ten sposób:
www.strona.pl/index.php?zmienna=25
a docelowo powinien wyglądać:
www.strona.pl/index-25.htm
reguła przekształcająca powinna wyglądać następująco:
RewriteRule ^index-([^-]*).htm$ index.php?zmienna=$1
w miejsce ([^-]*) wstawiana jest wartość zmiennej $1

W przypadku gdy adres zawiera kilka zmiennych:
www.strona.pl/index.php?zmienna1=25&zmienna2=26
gdzie docelowo powinien wyglądać:
www.strona.pl/index-25-26.htm
należy zastosować regułę:
RewriteRule ^index-([^-]*)-([^-]*).htm$ index.php?zmienna1=$1&zmienna2=$2 [L]

Zaleca się, aby prostsze reguły były po trudniejszych, innymi słowy najbardziej rozbudowane konstrukcje umieszczamy na początku pliki .htaccess.