http://htaccess.petertoth.hu/keresobarat-url-kialakitasa/Nem keresőbarát alatt, amiket el szeretnénk kerülni, pedig az alábbiakat:
http://htaccess.petertoth.hu/index.php?link=keresobarat-url-kialakitasa http://htaccess.petertoth.hu/index.php?id=300 http://htaccess.petertoth.hu/index.php?megye=Pest&varos=Erd
A keresőbarát url-ek használata előtt ellenőrizni kell, hogy fennálnak-e a htaccess, valamint külön az átirányítások használatának előfeltételei.
A legegyszerűbb eset kisebb oldalaknál, ha egyszintű url struktúránk van, azaz úgy néz ki, mint pl. ez a honlap, a domainen belül vannak könyvtáraink, de azokon belül alkönyvtárak nem. Ekkor a kód:
RewriteRule ^index.php$ - [L] RewriteRule ^(.+)/?$ index.php?url=$1 [L]
Itt a második sorban adtuk meg a tényleges átirányítási szabályt, ami minden olyan url-t átirányít, ahol a domain név után van egy / jeltől különböző karakter. Az első sor jelentése szerint az index.php marad saját maga, és itt véget is ér az átírás. Ez azért kell, mert e nélkül az index.php?url=index.php-t kapnánk.
Vegyük azt az esetet példának, hogy tudjuk, hogy az url struktúra legfeljebb 3 szintből áll. Ekkor a kód:
RewriteRule ^index\.php$ - [L] RewriteRule ^(.+)/(.+)/(.+)/?$ index.php?par1=$1&par2=$2&par3=$3 [L] RewriteRule ^(.+)/(.+)/?$ index.php?par1=$1&par2=$2 [L] RewriteRule ^(.+)/?$ index.php?par1=$1 [L]
Ezzel a kóddal a par1 paraméterbe kerül az első, par2-be a második, par3-ba a harmadik szintre beírt paraméter, ezt már php-ben könnyedén feldolgozhatjuk. Az átirányítási sorok sorrendje fontos, a legmélyebb tagolással kell kezdeni!
Nézzünk egy általánosabb esetet, amikor nem tudjuk, hogy milyen mély a könyvtárstruktúra:
RewriteRule ^index\.php$ - [L] RewriteRule . /index.php [L]
Ezzel a kóddal minden oldalt az index.php-re irányítunk át, miközben nem adunk át paramétert. Mégis, akkor hogy működhet ez a módszer? Hogy használhatjuk így a keresőbarát kifejezéseket?
Nos, még ha direktben nem is adtuk át a kért paramétert az index.php-nek, attól az még megkapja, hogy mi volt a beírt link. Ezt pl. PHP-ben a $_SERVER['REQUEST_URI'] változó kiolvasása adja meg. Ezt felhasználva és feldolgozva könnyedén visszaadhatjuk a felhasználónak az általa kért oldalt.
A fenti kódok használatával néha érdekes problémákba futhatunk bele. Láttuk, hogy a fenti kód minden url-t az index.php-ra irányít, így nagyszerűen tudjuk kezelni a "szép" url-eket. Csakhogy van ezzel egy gond: gyakran olyat is átirányítunk vele, amit nem kellene, az oldalunk ugyanis nemcsak a közvetlenül php-ben legenerált oldalakból áll. Vannak fizikailag létező file-ok is, amikre közvetlenül kell hivatkozni, és nem az index.php-n keresztül. Ilyen file pl. az oldal css stílusfile-ja, vagy mondjuk az oldalon megjelenő képek. Ha ezeket is átirányítjuk, akkor nem működik megfelelően az oldalunk.
PÉLDA: Korábban, bemutattam egy olyan alololdalt, ahol az oldalon egy kép is megjelenik. Az alábbi linken lévő alkönyvtáron pontosan ugyanezek a file-ok vannak, csak a htaccess-ben a fenti módon mindent az index.html-re irányítottunk.
/directoryindex3/Láthatjuk, hogy az oldal szövege valóban ugyanaz, azonban maga a kép nem jelenik meg, csak a kép helye. A kép pedig ottvan, csak a "minden" index.html-re való irányítása azzal a nem szándékolt mellékhatással járt, hogy a kép is átirányítódott az index.html-re, amit ezért nyilván nem tud képként megjeleníteni.
Ezt a problémát úgy küszöbölhetjük ki, ha feltételes átirányítást alkalmazunk, és megadjuk, hogy a fizikailag létező file-ok ne irányítódjanak át.
RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
Itt a !-f és a !-d feltételek azt adják meg, hogy az átirányítás csak akkor jön létre, ha a beírt url nem egy létező file (!-f) vagy könyvtár (!-d a directory rövidítéséből)
A következő fejezetben kielemezzük, hogy egy konkrét népszerű tartalomkezelő (CMS) rendszerben hogy történik a keresőbarát url-ek kialakítása.