Htaccess CMS rendszerekben

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 CMS saját blokkja

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 WordPress
sorok, 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 WordPress
sorokon 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 átírányítási feltételek ellenőrzése

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.

Az átirányítási modul bekapcsolása

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.

Az index.php helyben hagyása

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ás

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.