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.
regi.html belső átírása uj.html-re
Rewriterule ^regi\.html$ uj.html [L]
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]
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.
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.
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!