RewriteRule, RewriteCond – Przekierowanie 301 ze stron dynamicznych

czwartek, Czerwiec 24th, 2010 Brak Komentarzy
Kategoria: Tips & Tricks | Tagi: , , , ,

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
  • Print
  • RSS
  • Digg
  • Facebook
  • Twitter
  • del.icio.us
  • Google Bookmarks
  • Gwar
  • Wykop

Podobne wpisy:


Zostaw Komentarz

Wszelkie prawa zastrzeżone. Materiał zawarty na tej stronie jest ograniczony prawami autorskimi oraz innymi prawami i nie może być kopiowany, publikowany i rozprowadzany w żadnej formie.