Elemezzünk ki egy konkrét példát a keresőbarát url-ek kialakítására, egy ténylegesen létező CMS rendszerben. A Wordpress az egyik legnépszerűbb CMS rendszer. A keresőbarát url-ek kezelésére a Wordpress - amennyiben a Wordpresst a főoldalra telepítettük - ezt a htaccess file-t használja:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
Nézzük részletesen ennek működését!
A # karakter azt jelzi, hogy a sor megjegyzésnek számít, azaz ebbe a sorba bármit írhatunk, azt a htaccess nem veszi figyelembe. Ilyen # karakterrel indulnak a
# BEGIN WordPress # END WordPresssorok, ezek azt jelzik, hogy az e közötti részeket a Wordpress generálta.
Fontos, hogy ha saját kóddal egészítjük ki a htaccess-t, azt mindenképpen a
# BEGIN WordPress # END WordPresssorokon kívülre, elé tegyük! Ha nem kívülre tesszük, akkor a Wordpress bármikor átírhatja ezt a területet. Ha pedig nem elé, hanem mögé tesszük, akkor valószínűleg hatástalan lesz, mert a Wordpress által generált kód hamarabb kerül végrehajtásra.
Az
<IfModule mod_rewrite.c> </IfModule>blokk arra szolgál, hogy ne legyen szerverhiba, ha a szervermod_rewrite modulja nincs engedélyezve. Ilyenkor nem kapunk szerver hibát, azonban a keresőbarát url-ek nem működnek! Ilyen esetben a Wordpressnél csak az index.php?=... típusú linkek működnek. Ha biztosak vagyunk abban, hogy a saját szerverünkön mindenképp kell működnie a keresőbarát url-eknek, akkor inkább hagyjuk ki ez Ifmodule parancsot, sokkal egyszerűbb és egyértelműbb úgy a hibakeresés.
A RewriteEngine On bekapcsolja az átirányítási modul működését, ez teszi lehetővé a későbbiekben az átirányítások használatát. A RewriteBase / beállítja, hogy az átirányítás az url-eket a főoldalhoz képest adja meg. Amennyiben a Wordpresst alkönytárba telepítjük, akkor ennek a helyén a RewriteBase /könyvtárnév szerepel.
A
RewriteRule ^index\.php$ - [L]az index.php-t saját magára irányítja, és véget vet a további átirányításoknak, azaz bztosítja, hogy a következő utasítás végrehajtására az index.php esetében már ne kerüljön sor.
A tényleges átírást az alábbi utasítás végzi:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]Ebből a 3. sor mindent az index.php-re irányít, a két feltétel pedig azt mondja ki, hogy mindezt a létező file-ok és könyvtárak kivételével teszi.