Przyjazne linki, czyli Mod Rewrite dla praktyków
Ważnym elementem składającym się na funkcjonalną nawigację są przyjazne adresy stron. Przyjazne 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 zidentyfikować na ich podstawie strukturę serwisu i zaindeksować.
W artykule zebrane zostało kilka informacji dotyczących modułu rewrite serwera Apache, przydatnych dla początkujących.
W niniejszym artykule zamierzam poruszyć zagadnienie wykorzystania modułu rewrite serwera Apache dla generowania przyjaznych linków we własnym serwisie. Nie gwarantuje, że każdemu się uda przerobić swój serwis, tak by adresy były odpowiednie dla dobrego pozycjonowania przez wyszukiwarki, ale postaram się poprowadzić tak ten artykuł by każdy posiadał minimum odpowiedniej wiedzy.
Generalnie po przeczytaniu niniejszego tekstu powinieneś potrafić samodzielnie dokonać zmiany adresów postaci:
www.serwis.pl/index.php?zmienna1=a&zmienna2=b
na postać na przykład:
www.serwis.pl/index-a-b.php
Powodem, dla którego powstał ten artykuł, była maja praca nad tym problemem, a potem chęć podzielenia się swoimi wiadomościami z innymi by mogli zaoszczędzić trochę czasu. Cały problem z informacjami na temat przepisywania linków w serwisie na przyjazne wyszukiwarkom polega na tym, że bardzo rzadko informacje w sieci o module rewrite serwera Apache (plik .htaccess) są skorelowane z informacjami o faktycznym przepisaniu linków w posiadanym serwisie bez poprawiania w każdym miejscu gdzie są generowane odnośniki.
Ten artykuł w moim zamierzeniu ma łączy właśnie te informacje. Informacje tu zawarte nie są niczym twórczym i bazuję na tym, co jest dostępne w zasobach głównie for dyskusyjnych.
Co trzeba umieć:
- dobra znajomość php – jeśli wykonałeś serwis sam to chyba nie ma problemu,
- znajomość podstaw baz danych,
- znajomość struktury linków serwisu,podstawy wyrażeń regularnych (teoria wystarczy),
- jak manipulować serwerem Apache (httpd.conf).
Moduł Rewrite
Aby w ogóle korzystać z możliwości zamiany wyglądu linków musisz mieć możliwość włączenia (może jest włączony domyślnie) modułu Rewrite na serwerze Apache.
W pliku httpd.conf znaleźć sekcje:
Dynamic Shared Object (DSO) Support
i sprawdzić czy jest: LoadModule rewrite_module modules/mod_rewrite.so
Najczęściej to wystarcza, ale faktycznie bywa różnie. W przypadkach, kiedy występują problemy z uruchomieniem tego modułu warto poszukać rozwiązań na:
- http://forum.optymalizacja.com
- http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
- http://corz.org/serv/tricks/htaccess.php
- http://www.bilsoftware.com/php-mod_rewrite-1.html
Jeśli chodzi o serwery komercyjne bądź darmowe to czy moduł rewrite będzie działał zależy już tylko, od dostawcy usług hostingowych.
Serwery, na których pracowałem:
- testowy: Krasnal serwer 2.7: http://www.olesno.pl/~pablo/krasnal/index.php
- produkcyjny:hosting w home.pl – business server
Zakładając, że nasz moduł chodzi, możemy przejść do kroku następnego, czyli spreparowania pliku .htaccess.
Przygotowanie pliku .htaccess.
Jednym z dwóch filarów systemu zamiany linków jest obok samego przepisania odnośników plik .htaccess. Jego zastosowanie jest bardzo szerokie – pozwala, bowiem na zmianę pewnych ustawień serwera apache tylko dla serwisu, w którym się znajduje (szerzej: http://www.strefaphp.net/artykul55.html)
Na początku pliku umieszczamy kod:
Options FollowSymLinks
RewriteEngine On
teraz „wystarczy” napisać odpowiednie reguły, które tak naprawdę są aliasami do poszczególnych linków naszego serwisu. Po ich stworzeniu nadal możemy się odwoływać do pierwotnych linków.
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 mamy
Podsumowując mając plik: index.php możemy teraz odwołać się do niego również poprzez wpisanie index.html. Jeśli pojawia się jakiś błąd przy odwołaniu przez index.html to może to oznaczać ze na serwerze nie działa moduł rewrite lub nie jest on włączony.
Najprostszy przykład mamy za sobą. Czas na bardziej rzeczywisty problem – zmienne w adresie.
Mamy adresy:
a. Jedna zmienna w adresie
www.strona.pl/index.php?zmienna=25 a chcemy uzyskać: www.strona.pl/index-25.htm
wystarczy reguła:
RewriteRule ^index-([^-]*).htm$ index.php?zmienna=$1
w miejsce ([^-]*) wstawiana jest wartość zmiennej $1
b. Reguły z kilkoma zmiennymi
www.strona.pl/index.php?zmienna1=25&zmienna2=26
a chcemy uzyskać:
www.strona.pl/index-25-26.htm
wystarczy reguła:
RewriteRule ^index-([^-]*)-([^-]*).htm$ index.php?zmienna1=$1&zmienna2=$2 [L]
[L] – oznacza zatrzymanie procesu zamiany linków żadna reguła niżej nie zostanie zastosowana.
Więcej parametrów RewriteRule: http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteRule
Należy pamiętać o tym by najprostsze reguły były po trudniejszych, innymi słowy najbardziej rozbudowane konstrukcje umieszczamy na początku pliki .htaccess.
Można stosować odpowiednie opcje np. [L] dla reguły, ale na pewno łatwiej zmodyfikujemy plik, jeśli zajdzie taka potrzeba. Na podstawie: http://www.cms.rk.edu.pl/art_42.html.
Sprawdzenie .htaccess
Poprawność pliku .htaccess w zakresie reguł rewrite łatwo zweryfikować, pod warunkiem, że jest ich niewiele.
Wystarczy sprawdzić czy odwołanie:
www.strona.pl/index.php?zmienna1=25&zmienna2=26 i
www.strona.pl/index-25-26.htm
daje ten sam efekt jeśli tak to możemy przejść dalej czyli przepisać linki serwisu.
Przepisanie linków serwisu.
Trudno podać rozwiązanie, które można zastosować w każdej sytuacji.
Na początek warto rozważyć dwie kwestie:
- autor serwisu będzie przepisywał linki
- wykorzystano jakiś gotowy system lub wykonano go na zlecenie.
Jeśli sytuacja pierwsza ma miejsce to autor wie, w jaki sposób generowane są linki i zna strukturę swojego serwisu, więc nie będzie stanowiło problemu dopisanie kilku linijek kodu.
W drugim przypadku trzeba najpierw poznać strukturę serwisu, w jaki sposób są wywoływane poszczególne moduły. Jeśli wszystko sprowadza się do jednego pliku np. index.php to sprawa nie jest trudna, jeśli jest inaczej to informacje które znajdują się poniżej należy zastosować do każdego pliku. Można rozważyć także zlecenie komuś wykonania przystosowania serwisu dla generowania adresów przyjaznych wyszukiwarkom.
Zakładając, że wszystkie wejścia na serwis generowane są przez index.php wystarczy utworzyć plik np. rewrite.php. (plik pochodzi ze strony: http://www.cms.rk.edu.pl/art_136.html )
Nie ma konieczności zagłębiania, dlaczego właśnie taki a nie inny kod.
Wystarczy tylko we właściwym miejscu wprowadzić odpowiednie przepisania linków, i można już cieszyć się przepisywaniem linków.
W skrócie co się dzieje w rewrite.php
1. zmiana linków z nieprzyjaznych na przyjazne przy pomocy wyrażeń regularnych.
2. rozpoczęcie buforowania strony.
…
3. zakończenie buforowania storny (w każdym pliku gdzie inkludujemy rewrite.php)
Plik rewrite.php należy inkludować we wszystkich plikach serwisu, które są wykorzystywane bez pośrednio – czyli nie sa inkludowane przez inne plik – najwygodniejsza jest sytuacja, gdy jest to jeden plik np. index.php, najlepiej na początku.
A na końcu każdego pliku należy dodać
ob_end_flush();
To by było na tyle.
W razie pytań, wątpliwości zapraszam na forum.
Jeśli będzie zainteresowanie w kolejnym artykule postaram się opisać, co zrobić by maksymalnie przyśpieszyć indeksowanie nowych linków w Google i nie tylko przy wykorzystaniu map stron.
Na forum umieszczone zostały przykładowe kody źródłowe.
Źródła i materiały:
http://www.cms.rk.edu.pl/art_136.html
http://www.cms.rk.edu.pl/art_42.html
http://4programmers.net/Z_pogranicza/Mod_rewrite
http://www.bilsoftware.com/php-mod_rewrite-1.html
Powyższy tekst zawiera prywatne poglądy Autora. Niekoniecznie muszą odzwierciedlać one poglądy Redakcji.
Nowszy artykuł: Empikowi wyrósł długi ogon. Czym jest the long tail?
Starszy artykuł: Zarabianie na blogach, finansowanie Web2.0 — opinie
Tagi: mod rewrite, optymalizacja seo, przyjazne linki
Podobne posty:
- Powody spadku ruchu z wyszukiwarek (inne niż filtr/ban)
- Skrócenie czasu ładowania się strony [aktualizacja]
- Google przyspieszy twoją witrynę (modułem do Apache’a)
- Nowa wersja Bing Webmaster Tools
- 2 nowe metatagi od Google
Osoby które odwiedziły tą stronę znalazły ją szukając:
- mod rewrite
- rewrite
- apache mod_rewrite
- przyjazne adresy
- przyjazne linki mod_rewrite
- htaccess przyjazne linki
- przyjazne linki htaccess
- mod_rewrite przykłady
- przyjazne adresy url
- zamiana linków php na html seo