Alkalmazások

Az előző fejezetekben elég alaposan bemutattam, hogy mik az átirányítások alapszabályai, és ezek alapján már könnyű "olvasni" és értelmezni a mások által megírt átirányítási szabályokat. Írásnál persze nem olyan könnyű, nem jut könnyen eszünkbe, hogy milyen szabályt kellene éppen alkalmazni. Éppen ezért segítségül összeszedtem sok, valóban felmerülő problémát, és bemutatom, hogy milyen kóddal lehet megoldani. Az egyes kódokhoz nem fűzök túl részletes magyarázatot, ha valami nem teljesen világos, akkor a korábbi fejezetekben megvan annak a részletes leírása, hogy mi miért pont úgy működik, ahogy működik.

Nem írom ki az alábbi példákban egyesével, de minden esetben úgy kezdődik a htaccess, hogy:

DirectoryIndex index.html index.php
Options -Indexes

Options +FollowSymlinks
RewriteEngine on
RewriteBase /

Az adott feladatokra nem ezek az egyedüli jó megoldások, amiket itt leírok. Egy problémának több jó megoldása is van, ezek közül találomra választottam ki azt, ami nekem szimpatikus.

Konkrét lap átirányítása

Konkrét nem query stringes lap belső átírása

regi.html belső átírása uj.html-re

Rewriterule ^regi\.html$ uj.html [L]

Konkrét nem query stringes oldal árirányítása

regi.html átirányítása uj.html-re. A kód ugyanolyan, mint az előbb, csak kiegészül az [R], illetve az [R=301] flaggel

Rewriterule ^regi\.html$ uj.html [R=301,L]

Konkrét query stringes lap átirányítása

Átirányítás ugyanolyan query string értékű új oldalra

regi.php?id=32 átirányítása uj.php?id=32-re, ahol a 32 helyén bármi konkrét érték lehet

RewriteCond %{QUERY_STRING} ^id=32$[NC]
RewriteRule ^regi\.php$ uj.php [L]

Figyeljük meg, hogy a RewriteRule-nál már nem kellett megadni a ?id=32 értéket, azt a RewriteRule automatikusan hozzáteszi.

Átirányítás query string nélküli új lapra

regi.php?id=32 átirányítása uj.php-re

RewriteCond %{QUERY_STRING} ^id=32$ [NC]
RewriteRule ^regi\.php$ uj.php? [L]

Figyeljük meg, hogy a kód ugyanaz, mint az előbb, csak az uj.php végén van egy kérdőjel. Ez azt jelzi, hogy le kell vágni a query string-et.

Átirányítás más query string-el rendelkező lapra

regi.php?id=32 átirányítása uj.php?regioldal=regi&id=32 -re

RewriteCond %{QUERY_STRING} ^id=32$ [NC]
RewriteRule ^regi\.php$ uj.php?regioldal=regi [QSA,L]
#Alternatívaként használható ez is:
RewriteCond %{QUERY_STRING} ^id=32$ [NC]
RewriteRule ^regi\.php$ uj.php?regioldal=regi&id=32 [L]

Fegyeljük meg a fenti két kódban a QSA flag használatát, illetve nem használatát!