SprawnyMarketing.pl - Skuteczny i ekonomiczny marketing internetowy

Misją serwisu jest tworzenie społeczności wokół idei sprawnego marketingu internetowego. Dzielimy się wiedzą, szkolimy, udostępniamy narzędzia.


Przyjazne adresy stron internetowych. Mod Rewrite dla praktyków

 | Autor: Radosław Owczarek



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: 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

Radosław Owczarek
Absolwent: 1. UAM Poznań - Informatyk. 2. AE Poznań - Marketing (podyplomowe) Zainteresowania: 1. Bazy danych 2. Techniczne aspekty marketingu internetowego 3. Filmy i literatura S-F

Nowszy artykuł:
Starszy artykuł:

Podobne posty:


This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

3 Trackbacks/Pingbacks

  1. Pingback: SprawnyMarketing » Sklep internetowy — promocja on Sierpień 25, 2006
  2. Pingback: Wykład na OKEBI: Long Tail (Długi Ogon) a SEO w e-Bizesie » Sprawny Marketing on Listopad 6, 2007
  3. Pingback: Długi ogon w SEM — 3 przykłady i 5 rad • SprawnyMarketing.pl on Sierpień 13, 2008

28 Comments

  1. Krzysztof Gaudy Krzysztof Gaudy Krzysztof Gaudy , Maj 13, 2006:

    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.

  2. Paweł Rabinek Paweł Rabinek Paweł Rabinek , Maj 13, 2006:

    Mod_rewrite daje także (między innymi) możliwość towrzenia subdomen i przypisywania ich do katalogów na serwerach. Jest to szczególnie przydatne gdy brakuje takiej opcji w panelu administracji naszego hostingu. Na moim blogu: http://blog.xradar.net/seo/subdomeny-htaccess-apache/ opisałem jak stworzyć odpowiednie wpisy w .htaccess aby uzyskać taki efekt.

  3. Radosław Owczarek Radosław Owczarek Radosław Owczarek , Maj 13, 2006:

    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.

  4. drozdziak drozdziak drozdziak , Czerwiec 7, 2006:

    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.

  5. Piotrek Piotrek Piotrek , Czerwiec 19, 2006:

    bardzo fajny artykuł. Zaraz zabieram się do pracy i będę przerabiał stronkę.
    Pozdrawiam

  6. Krzysztof Leśniak Krzysztof Leśniak Krzysztof Leśniak , Sierpień 3, 2006:

    Artykul ciekawy ale szkoda, ze nie ma informacji ktore linki sa bardziej przyjazne dla wyszukiwarek:
    http://www.adres.pl/strona/
    http://www.adres.pl/strona
    http://www.adres.pl/strona.htm
    Niby wszystkie sa przyjazne ale roznica pomiedzy nimi jest.

  7. Paweł Rabinek Paweł Rabinek Paweł Rabinek , Październik 28, 2006:

    @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.

  8. Primero Primero Primero , Listopad 13, 2006:

    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;)

  9. Usuwanie simlocka Usuwanie simlocka Usuwanie simlocka , Listopad 21, 2006:

    Ja mam podstrony zapisane jako .html

  10. Darmowe Aliasy Darmowe Aliasy Darmowe Aliasy , Grudzień 16, 2006:

    Ja korzystam bardziej z .htm ;)
    A tak marginesem, bardzo dobry ten artykuł !

  11. Maciek Maciek Maciek , Styczeń 9, 2007:

    (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

  12. Mirosław Bagrowski Mirosław Bagrowski Mirosław Bagrowski , Styczeń 13, 2007:

    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

  13. olo olo olo , Marzec 25, 2007:

    @Maciek

    Ja zastosowałem

    Dzięki temu nie musisz martwić się o linki – u mnie to rozwiązało problem

  14. olo olo olo , Marzec 25, 2007:

    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

  15. mod rewrite mod rewrite mod rewrite , Maj 3, 2007:

    Ostatnio pojawił się artykuł na stronie http://sf.jogger.pl , pokazujący najpopularniejsze przykłady zastosowania mod rewrite.

  16. gilbo gilbo gilbo , Sierpień 8, 2007:

    Niestety metoda olo nie pomogła! Nie ładuje mi się css i js czy wie ktoś jak temu zaradzić?

  17. Totolotek Totolotek Totolotek , Październik 23, 2007:

    to działa tylko na małych stronach, każda bardziej rozbudowana strona rozpada sie na kawałki…

  18. jacek mazury jacek mazury jacek mazury , Grudzień 19, 2007:

    a u mnie na serwerze mam niby włączone mod rewrite – tak twierdzi admin a nie mogę tam wgrać pliku .htaccess .. nie ma błędu przy wgrywaniu , mam ustawione w commanderze pliki ukryte a po skopiowaniu .htaccess plik jakby znikał …

  19. Simij Simij Simij , Luty 1, 2008:

    Linki podane w artykule nie dzialaja…

  20. Simij Simij Simij , Luty 1, 2008:

    Ok juz wiem.Forum…

  21. dewu dewu dewu , Kwiecień 10, 2008:

    „Moze ktos ma jakis sprytny sposób na to? Ja narazie nie znalazlem rozwiązania”
    „Niestety metoda olo nie pomogła! Nie ładuje mi się css i js czy wie ktoś jak temu zaradzić?”

    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

  22. Keran Keran Keran , Grudzień 21, 2008:

    Gdzie jest pokazane źródło pliku rewrite.php cytowanego w artykule?? podany obok link http://www.cms.rk.edu.pl/art_136.html nie istnieje!

  23. Wiktor Wiktor Wiktor , Marzec 24, 2009:

    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. :)

  24. bybek5 bybek5 bybek5 , Marzec 25, 2009:

    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 :(

  25. Gość Gość Gość , Listopad 17, 2009:

    „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.”

    Nie zgadzam się; patrz: Wikipedia

  26. free vectors free vectors free vectors , Styczeń 26, 2010:

    Troszkę chaotycznie pisany kilka rzeczy nieprzydatnych ale ogólna ocena dobra pozdrawiam serdecznie

  27. mieszkania szczecin mieszkania szczecin mieszkania szczecin , Marzec 15, 2010:

    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.

  28. @cezarylech @cezarylech @cezarylech , Marzec 16, 2010:

    ISAPI Rewrite: Addressing Canonicalization and Redirects on Windows Server
    http://www.searchenginejournal.com/isapi-rewrite-...

Leave a comment