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:
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:
– 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:
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
Przypominamy, że wielkimi krokami zbliża się konferencja I ♥ Marketing & Technology, która odbędzie się już 8–10 kwietnia 2025 roku.
Zapoznaj się także z ofertą organizowanych przez nas szkoleń z zakresu marketingu.
Od strony pozycjonowania natomiast, to dla robotów Google lepiej jest robić adres w postaci http://www.strona.pl/index/25/26.htm niż http://www.strona.pl/index-25-26.html. W ten sposób Google nie widzi wszystkich linków jako skatalogowanych w jednym folderze, ale ma całą strukturę (hierarchię) serwisu.
Witam.
Dzięki za komentarze.
To mój pierwszy artykuł i na pewno daleko mu do ideału.
Panie Krzysztofie:
Faktycznie tak jest że lepiej sa indeksowane adresy ze „slash’ami”, ale nie o tym miał być ten artykuł – może nastepny będzie o tym traktował
Panie Pawle:
O tym nie wiedziałem – chętnie przeczytam.
Bardzo wam dziękuje za opinie
Proszę także o wypowiedzi jak sie mnie czyta.
Pozdrawiam.
Jak dla mnie tekst wysoce specjalistyczny ( to a propos pytania „jak sie mnie czyta”)
W sumie treść nadająca sie dla administratorów strony, mniej dla osób związanych z marketingiem.
bardzo fajny artykuł. Zaraz zabieram się do pracy i będę przerabiał stronkę.
Pozdrawiam
@Krzysztof Leśniak – milej widzianym adresem będzie „strona/” ponieważ wskazuje na index. Adres „/strona.htm” to konkretny dokument. W gruncie rzeczy nie ma tu znaczącej różnicy. Dobrze jest tworzyć adresy tak, aby były łatwe do zapamiętania/zapisania przez użytkownika oraz aby zawierały frazy kluczowe.
Pamiętajmy jednak, że nie od adresu url wszystko zależy. Jest istotny, jednakże 'siła’ zawartości strony może zwiększyć oczekiwaną pozycję wśród wyników wyszukiwania. Każda zmiana i dopasowanie się do obowiązujących algorytmów to właśnie sprawny marketing;)
Ja mam podstrony zapisane jako .html
Ja korzystam bardziej z .htm ;)
A tak marginesem, bardzo dobry ten artykuł !
(cytat)”….Od strony pozycjonowania natomiast, to dla robotów Google lepiej jest robić adres w postaci http://www.strona.pl/index/25/26.htm niż http://www.strona.pl/index-25-26.html. W ten sposób Google nie widzi wszystkich linków jako skatalogowanych w jednym folderze, ale ma całą strukturę (hierarchię) serwisu…..”
Przy tej metodzie moze wystąpić jeden problem. Występuje on wtedy,gdy linki w tresci serwisu byly tworzone np. href=’test.php’ a nie href=’/test.php’. Ponieważ znajdujac sie na stronie http://www.strona.pl/index/25/26.htm link przekieruje nas na strone http://www.strona.pl/index/25/test.php, ktory nie istnieje (zakladajac ze istnieje http://www.storna.pl/test.php).
Moze ktos ma jakis sprytny sposób na to? Ja narazie nie znalazlem rozwiązania
Witam!
A jeśli w adresie są ” ??
Nie działa:
$link=preg_replace(’#/go/_category/?idc=%22id_3%22#’,’bielizna-damska’,$link);
jak to obejść? Odpowiedź na bagros [małpa] o2 [kropka] pl
@Maciek
Ja zastosowałem
Dzięki temu nie musisz martwić się o linki – u mnie to rozwiązało problem
heh. Chyba autor zlikwidował rozwiązanie przy pomocy strip_tags ;)
oto ono jeszcze raz:
<base href=”http://twoja.domena/katalog/” />
gdyby coś się nie tak wyświetliło to wiadomo, że:
< -> znak mniejszości
> -> znak większości
Ostatnio pojawił się artykuł na stronie http://sf.jogger.pl , pokazujący najpopularniejsze przykłady zastosowania mod rewrite.
to działa tylko na małych stronach, każda bardziej rozbudowana strona rozpada sie na kawałki…
Linki podane w artykule nie dzialaja…
Ok juz wiem.Forum…
Witam,
Metoda jest bardzo prosta – zapisz link w pełnej postaci, czyli:
– href=”http://domena.pl/test.php”
– href=”http://domena.pl/style.css”
Tak samo należałoby postępować ze wszystkimi obrazkami:
zamiast href=”http://domena.pl/flags.gif”
P.S. Jeśli często zmieniasz domenę to polecam wykorzystać php:
$DomenaMojejStrony = ‘http://domena.pl/’; (zmienna! ;])
Pozdrawiam
Bardzo fajny artykuł! Wreszcie udało mi się zrozumieć o co w tym biega… już sobie zamieniłem adresy z brzydkiego „adresstrony.pl/index.php?skok=2” na „adresstrony.pl/kontakt” itp. :)
Fajny artykuł, ale mam pewien problem
Mianowicie, nie wiem jak zmienić takie coś, aby adres był przyjaźniejszy
pokaz_sz_ogl.php?idogl=50tytul=Pi%EAkny%20dom%20wolno%20stoj%B1cy,%20du%BFa%20dzia%B3ka
To idogl=50 jeszcze bym zmienił ,ale ten tytuł nie wiem jak :(
Witam, A czy na home.pl wszystkie reguły apache’owe działąją? Bo mam wątpliwości, np. wyświetlanie grafik z podkatalogów.
ISAPI Rewrite: Addressing Canonicalization and Redirects on Windows Server
http://www.searchenginejournal.com/isapi-rewrite-…
Zastosowałem reguły dla swojej strony. W przeglądarce wpisując „ręcznie” przyjazny adres, wszystko działa, jeśli natomiast poruszam się między podstronami klikając w linki nadal figurują stare nieprzyjazne adresy… Jak temu zaradzić ?
A czy przekierowaniem 301 można też skutecznie pozycjonować stronę ?
Vеry nice articⅼe, exɑctly what I wanted
t᧐ find.