Konstrukcja adresów URL
Parametry w adresach URL
Wraz z rozwojem i popularyzacją technologii tworzenia stron internetowych, jaką jest PHP należy unikać tworzenia adresów zawierających ciągi parametrów, które powodują generowanie dynamicznej treści w zawartości podstron. Duża ilość skryptów – na przykład for czy blogów, wykorzystuje takie parametry by generować odpowiedni treści wewnątrz serwisu. Przykład adresu z parametrami:
http://adres.pl/?kategoria=programowanie&wpis=16
Problem jaki rodzą takie adresy, jest fakt, że można poszczególne parametry przestawić. Takie same treści otrzymamy z adresu, w którym parametry ułożone by były tak:
?id=16&kategoria=programowanie
Jak widać powyżej, przestawiona została kolejność parametrów ID oraz kategoria. Takie generowanie treści utrudnia robotom indeksowanie strony, gdyż te same treści są dostępne z kilku lokalizacji URL, dlatego należy zrezygnować w ramach możliwości z takiego adresowania. Aby uniknąć takich sytuacji można wykorzystać w ramach możliwości dobrodziejstwa mod_rewrite.
Budując, dosyć dawno katalog stron internetowych również chciałem uniknąć problemu parametrów w adresie. Skorzystałem z prostej metody, która jednym zamachem pomogła mi w ukryciu parametrów zarówno kategorii, subkategorii i konkretnych podstron. Reguły dotyczące mod_rewrite należy zapisywać w dokumencie .htaccess na serwerze naszej strony.
RewriteEngine On RewriteRule ^([a-z0-9-_]+),([a-z0-9-_]+).html$ $1.php?id=$2 [L,NC,NS]
Powyższa regułka przepisywania składa się z następujących elementów:
- RewriteEngine On – oznacza, włączenie opcji przepisywania adresów.
- RewriteRule - to początek nowej reguły przepisywania.
- ^ - rozpoczyna wyrażenie regularne.
- ([a-z0-9-_]+),([a-z0-9-_]+).html – cała zawartość reguły, w której występują dwa ciągu ([a-z0-9-_]+) – czyli mogą zawierać wszystkie litery i cyfry. Pomiędzy dwoma ciągami jest , - każdy znak specjalny należy poprzecie Więc ten zapis mówi, że po środku jest przecinek. Na końcu dopisany został .html – by adres dokumentu sugerował zwykły dokument html.
- $ oznacza koniec wyrażenia regularnego, do którego będą porównywane wpisywane adresy.
- $1.php?id=$2 – To część na jaką zostaną przepisane adresy, wyciągnięte z prawidłowych adresów. Jak widać, są to adresy z parametrami. Nie będą one jednak rozpoznawane przez roboty wyszukiwarek, które otrzymają pełne adresy. Pierwsze ($1) odwołuje się do pierwszego ciągu znaków ([a-z0-9-_]+), a $2 do kolejnego licząc od prawej.
Dzięki takiemu prostemu zapisowi nie było konieczności korzystania z adresów takich: http://adres.pl/katalog.php?id=15
Gdyż ten adresy był wczytywany, przy wpisaniu takiego pełnego URL: http://adres.pl/katalog,15.html. W dużym uproszczeniu i nie jest tak dosłownie, skrypt zamienia przecinek występujący w przyjaznym adresie internetowym, na taki zapis .php?id=, dzięki czemu wczytywane są odpowiednie treści jak przy wykorzystaniu adresów z parametrami.
Powyższa reguła może nie pasować do Twojego serwisu, gdyż dla każdej struktury regułki mod_rewrite mogą wyglądać inaczej.
Oczywiście ModRewrite to spora dziedzina związana z technologią Apache, więcej o mod rewrite możesz przeczytać w artykułach:

