htaccess
A htaccess-rol altalaban ket dolog jut az emberek eszebe: a sef url-ek es a 301-es atiranyitas.
Eloszor is nezzuk a masodikat. Mit is jelent a 301 -es atiranyitas. A 301 egy http status code aminek jelentese: “Moved Permanently”. Altaban akkor hasznalatos ha a domain-nevunk megvaltozott, de szeretnenk ha az eddigi latogatok(robotok vagy humanoidok) atiranyitodnanak az uj domainre.
Lassunk akkor erre egy peldat:
Redirect 301 / http://www.ahovairanyitom.com/
A fenti peldat alkalmazva az egesz domaint atiranyanyitom egy masikra. Ugyanezzel a megoldassal csak egyes aloldalakat is atiranyithatunk:
Redirect 301 /akarmi.html http://www.ahovairanyitom.com/valami.html
A bongeszoben ilyenkor annyi tortenik hogy az atiranyitott oldal lekeresekor a server kuld egy 301 -es status code -ot es az uj cimre iranyitja bongeszot/vagy a robotot/.
Az atiranyitas alapjaival mar tisztaban vagyunk nezzuk a sef url-eket. A weboldalak jelentos resze ugynevezett “sef url”-eket hasznal,mert a kereso allitolag ezt szereti. Az en maganvelemeny az hogy ha a kereso nem szeretne en akkor is alkalmaznam, mert a weboldal embereknek keszul es ok konnyebben megjegyeznek egy ilyen urlt mint egy get parameterekkel telepakoltat.
Ezeket az url-eket altaban a htaccess fajl segitsegevel allitjak elo.
Nezzunk is a legegyeszerubb peldat. Ez egy sima 301 atiranyitas amivel egy fix url-t egy masik fix url-re iranyitunk.
Redirect 301 /akarmi.html http://www.ahovairanyitom.com/
Ez ugyebar ugyanaz mint a fentebbi pelda. Bonyolitsuk egy kicsit es vigyunk bele egy szabalyt. Tegyuk fel hogy egy webshop-al van dolgunk vannak termekkategoriak es termekek. A motorunk ket get parametert var az url-ben: a kategoria azonositojat es a termek azonositojat, de mi ezt az url-t szeretnenk latni:
domain.com/kategoria/termeknev.html
Ehez arra van szukseg hogy minden termekhez az adatbazisban hozzarendeljunk egy sef-nevet ami egyedi, vagy ha az egyediseg nem kivetelezheto akkor az url vegere biggyesszuk oda az id-t:
domain/kategoria/termeknev-id.html
Tehat az url amit latni akarunk mar megvan, de a kodunknak a kovetkezore lenne szuksege:
domain.com/index.php?kategoria=2&termek=10
Akkor lassuk a htaccess fajlunkat:
RewriteEngine On RewriteEngine On RewriteRule ^(.*)/(.*)-(.*).html index.php?kategoria=$1&termek=$3
Mit is csinal a fenti kod. Eloszor bekapcsolja a rewrite engine-t(itt hasznalhatnank hibakezelest, mert nem mindenhol engedelyezett,de azt majd legkozelebb), aztan jon a szabaly. A fenti szabaly eleg egyszeru. A balodalon latjuk a sef url lekepezeset ami jelen esetben a domain utani barmiluyen karakter az elso foreslash-ig az elso darab es a masodik darab szinten egy barmilyen karaktert tartalmazo string, aztan jon egy kotojel mint elvalaszto karakter ezutan megint egy string es a .html .A jobb oldalon pedig a balodalon beallitott valtozok($1,$2,$3) segitsegevel az url lekepzese amit a kodunk var. Talan igy erthetobb: a domain/akarmi/akarmi-id.html url bol a ket akarmi a $1 es a $2 az id pedig a $3. Igy ezzel az egy szaballyal ezt a reszet a webshopunknak le is tudtuk.
Ami nagyon fontos a htaccess rewrite-al hogy a szabalyok soronkent hajtodnak vegre es ezert felulirjak egymast, ugyhogy erre figyeljunk oda amikor tobb szabalyt irunk.
Es akkor a vegen lassuk mi is a legegyeszerubb megoldas:
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]A fenti szabaly amennyiben nem letesik ilyen neven fajl es nem letezik ilyen neven mappa az url tartalmat az url nevu get valtozoba pakolja. Igy kapunk egy stringet amit a kodunkal feldogozhatunk es eldonthetjuk mit is kell kimeneteznunk.
Mara ennyi, de szerintem meg folyt. kov.
Cimkék: 301 atiranyitas, apache, htaccess, mod rewrite

11. július 2009 06:59
Hi! Mostanában ásom bele magam kicsit mélyebben a témába, úgy tűnik, ez a cikksorozat nagyon jó kis alapozó lesz.
Kíváncsian várom a folytatást!
12. szeptember 2009 16:50
.htaccess 301 és társai. Igen-igen, van létjogosultsága ennek a cikknek, cikk-sorozatnak. Gratula hozzá. Szép és áttekinthető, nincs túlbonyolítva mégis megfelelő mélységekben magyarázol, plussz egy lépés sem maradt le. Köszönjük! Csak így tovább!