RewriteRule, RewriteCond – Przekierowanie 301 ze stron dynamicznych
Mod_Rewrite to moduł Apache pozwalający na tworzenie prostych i przyjaznych adresów (linków). Wykorzystywany jest on także do wykonywania przekierowań. Poniżej opiszę krótki tip, który może się przydać przy tworzeniu bardziej skomplikowanych odpytań.
Najpierw jednak kilka słów wstępu:
1. Aby dokładnie zrozumieć funkcjonowanie mod_rewrite musimy najpierw poznać wyrażenia regularne. Na warty uwagi kurs zapraszam na stronę: perldoc.perl.org/perlre.html Wkrótce również i u mnie może coś więcej w tym temacie.
2. Będziemy korzystać przede wszystkim z dwóch metod dostępnych w module mod_rewrite:
- RewriteCond
- RewriteRule
Pierwsza z nich służy do podawania warunków, jakie mają być spełnione przez dany adres (jest ona opcjonalna i nie tak często wykonywana). Druga natomiast służy do wykonywania odpowiednich działań (przekierowań, maskowania adresów).
Czas na tip’a:
Powiedzmy że chcemy wykonać przekierowanie 301 z podstrony która jest generowana dynamicznie na podstronę, która posiada przyjazne adresy.
Czyli stronę:
- www.entuzjasta.com/index.php?podstrona=test&wartosc=69
Chcemy przekierować na taki oto adres:
- www.entuzjasta.com/test/69
Zapis w postaci:
RewriteRule ^index\.php\?podstrona=([^&]+)&wartosc=([^&]+)$ /$1/$2 [R=301]
Niestety nic nam nie da, ponieważ RewriteRule nie radzi sobie z wartościami przekazywanymi dynamicznie. Musimy więc zrobić coś takiego:
RewriteCond %{query_string} ^podstrona=([^&]+)&wartosc=([^&]+)$
RewriteRule ^index\.php$ /%1/%2? [R=301]Wykorzystujemy zatem w tym celu RewriteCond i zmienną globalną która przekazuje listę parametrów GET – QUERY_STRING. W RewriteRule zapisujemy, na którą podstronę ma być wykonane przekierowanie, stosując % (procenty) a nie $ (dolary). Różnica polega na tym, że procenty służą do pobierania zmiennych z linii RewriteCond. Na końcu należy pamiętać by dołączyć znak „?”, gdyż bez niego adres na który zostanie wykonane przekierowanie będzie wyglądał następująco:
- www.entuzjasta.com/test/69/?podstrona=test&wartosc=69
Znak „?” informuje więc moduł by przy przekierowaniu nie pobierał żadnych dodatkowych zmiennych.
Wkrótce opiszę inne przydatne i warte uwagi zmienne globalne wykorzystywane w RewriteCond.
Słowniczek: Przyjazne adresy (przyjazne linki)
Tworząc rozbudowane portale zazwyczaj mamy do czynienia z przekazywaniem wielu zmiennych przez GET’a i na ich podstawie wczytywane są odpowiednie podstrony. Np.:
- www.entuzjasta.com/index.php?opcja=pokaz_art&art=1020&podstrona=2
Przyjazne adresy (linki) to takie, które są łatwe do przejścia przez roboty sieciowe, wyglądają „przyjemniej dla oka”, są łatwiejsze do zapamiętania. Tworzone są one na podstawie maskowania wersji oryginalnych. I tak wg. powyższego przykładu możemy stworzyć adres:
- www.entuzjasta.com/pokaz_art/1020/2









