A legtöbb szerveren (kivételt képeznek az ingyenes szolgáltatók) lehetőség nyílik a .htaccess fájl és a mod_rewrite
használatára. Ebben az a jó, hogy könnyedén készíthetünk barátságos weboldalcímeket, melyek kényelmesebbé teszik oldalunk használatát. Fontos, hogy az itt leírtak helytelen használata a szerver ideiglenes leállásához vezethet, valamint néhány szerveren kérni kell, hogy engedélyezzék a .htaccess fájlok használatát.
A kezdet
Legelőször szükségünk lesz egy .htacces fájlra. Ezt Total Commanderben, vagy valamelyik hasonló fájlkezelőben tudjuk létrehozni. A fálj neve egyszerűen .htaccess, tehát semmi nincsen a pont előtt. Ebben kapásból elhelyezzük a vizsgálatot, hogy a szerver támogatja-e a nekünk szükséges szolgáltatást:
<IfModule mod_rewrite.c>
RewriteEngine On
# ide helyezzük majd a tartalmat
</IfModule>
Ez egyelőre semmi többet nem csinál, csak ellenőrzi, hogy a mod_rewrite modul használható-e, és ha igen, akkor aktiválja azt.
A régi cím
Vegyül például Dani blogját (remélem nem haragszik meg érte), ahol egy bejegyzésre mutató link nagyjából így néz ki:
http://creative-x.hu/dani/index.php?bejegyzes=1&id=476
Itt a bejegyzes
rész nem tudom, hogy mit jelent, de az id
értelemszerűen a bejegyzés azonosítójára mutat. Ezt a rút és barátságtalan linket, most gyönyörű kedves hivatkozássá változtatjuk.
A lecsó közepe
Mondjuk az új cím kinézete legyen az, hogy /bejegyzes/id/
. Ez kezdetnek megteszi, később pedig tudunk vele variálni. Az előbb elkészített fájlunkban, a megjegyzés helyére az alábbi sort szúrjuk be:
RewriteRule ^bejegyzes/([0-9]+) index.php?bejegyzes=1&id=$1
Ebben egy apró mintaillesztés található, ami mondatszerűen nagyjából úgy hangzik, hogy legyen egy bejegyzes
mappa, majd azután egy per jel, és egy tetszőleges hosszúságú szám. A sima zárójelben található érték memorizálva
lesz, így erre később hivatkozhatunk. Egy szünet következik, és utána az a cím, ahová irányítunk. Ez ugye a fönt említett cím, de az id
után egy $1
kerül, amiben a memorizált szám található. Ezt lementve, majd a főkönyvtárban elhelyezve tökéletes, letisztult weboldalcímet kapunk, valami effélét:
http://creative-x.hu/dani/bejegyzes/476
A befőttesüveg
Vannak ennél összetettebb példák, ahol több feltétel megadása szükséges. Szintén Dani oldalán nézelődtem, és az irattár
linkjei pont megfelelőek erre a célra. Így néz ki egy hónap elérése:
http://creative-x.hu/dani/index.php?archive=1&year=2006&month=3&page=1
Ez már kissé összetettebb, mint az előző link, így több dolgunk is lesz vele. Az archive
rész újfent nem tudom mi lehet, talán a mód váltása, ez számunkra elhanyagolható, csak az átirányításnál írjuk majd be. A terv, hogy a csúnya linkből, valami ilyet csináljunk:
http://creative-x.hu/dani/irattar/2006/3/1
Ez nemcsak barátságosabb, hanem sokkal rövidebb is. A megvalósítása pedig nem sokkal bonyolultabb, mint az előző esetben. Vegyük elő a fájlunkat, és az előző sor után (tehát mindenképpen az </IfModule>
elé) helyezzük el az alábbi sort (a láthatóság érdekében két sorban írom):
RewriteRule
^irattar/([0-9]+){4}/([0-9]+){2}/([0-9]+){2} index.php?archive=1&year=$1&month=$2&page=$3
Ez már kicsit bonyolultabbnak tűnik, de csak a sok zárójelnek köszönhetően
. Ismét mondatszerűen, ez annyit csinál, hogy az irattar
mappából elővesz egy legalább négyjegyű számot (ezt a kapcsos zárójelek között adtuk meg), amit memorizál $1
-nek. Eztán vesz két, legalább kettő jegyű számot, s ezeket $2
és $3
néven tárolja. Az így kapott eredményt pedig a fent említett hivatkozásra irányítja. Tehát az első szám lesz az év, a második a hónap, a harmadik pedig az aktuális oldal.
Meglátni és megszeretni
Az ezek, és ezekhez hasonló módszerekkel csodálatos eredményeket lehet elérni, minimális erőfeszítés mellett. A használatához persze elengedhetetlen egy minimális ismeret a mintaillesztő, azaz reguláris kifejezésekből. Ezekhez a legjobb segédlet a PHP onlájn kézikönyve, valamint Verhás Péter írása.
zulukaaa
2006. április 18. — 16:43:18
mefi:Látom nálad is efféle ‘”módszer” van 🙂
Shamalt
2006. április 18. — 17:16:07
az eveknel-honapoknal minek a legalabb? 10000-ben mar nem valoszinu, hogy menni fog a blog 😀
masreszt meg a postoknak a bejegyzes resz siman elhagyhato, es mehet a /id/cim url.
sajt
2006. április 18. — 21:18:41
Azért ettöl még nem lesznek a webcímek baratsagosak, mert a letrehozott belso linkeket is at kell alakítani. Talán érdemes megnézni a drupalt is, hogy az hogyan kezeli a dolgot, meg mas motorokat amik hasonloan mukodnek. Illetve a weblaboron is van errol szo korabban.
Schmile
2006. április 18. — 21:52:14
Ajánlom ezt: http://www.ilovejackdaniels.com/cheat-sheets/mod_rewrite-cheat-sheet/
Adam
2006. április 19. — 09:40:42
Hali!
Az irattáros regexp-nél:
^irattar/([0-9]+){4}/([0-9]+){2}/([0-9]+){2}
ez működőképesebb — és ezért nem megy Daninak — lehet:
^irattar/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})
Tehát nálad a hónapokat és napokat kötelezően két karakterben kellett megadni, míg a példádban is csak 2006/3/1-et írtál, ami ezért nem ment. Regexp-ben a {} a következőket jelöli:
{2}: kötelezően 2 karakter
{1,}: minimum 1 karakter
{1,6}: minimum 1 karakter, maximum 6
n2k
2006. június 22. — 12:40:24
na, ez kell nekem, köszi mefi! 🙂
n2k
2006. június 22. — 12:40:24
Az irattár nem akar müködni… :S
Mefi
2006. július 22. — 12:27:48
[re=7190]Dani[/re]: nincs mit. :
[re=7191]zulukaaa[/re]: igen, mert véleményem szerint ez pofásabb, mint a
?valmi=buher
szerkezet. Ha lesz időm, írok arról is, hogy lehet a címet odabiggyeszteni.Mefi
2006. július 22. — 12:27:48
Jó, tízezerben valszeg nem olvassa ezt már senki. 😀
A bejegyzes rész az jobb, mert a domain/id/ nekem nem jön be; persze ez személyes dolog. 🙂
Mefi
2006. július 22. — 12:27:48
[re=7236]sajt[/re]: De a fent említett példákat sokkal barátságosabbá tettük. Meg ez inkább egyéni motort bömböltetőknek szól. 🙂
[re=7243]Schmile[/re]: köszi, ez tetszik! 🙂
Mefi
2006. július 22. — 12:27:48
Köszi a segítséget, de kiderült, hogy mi a probléma, részben ez, részben pedig az is, hogy lemaradt két nyitó zárójel. 🙂
Free 3gp videos
2007. június 11. — 01:46:00
Szuper leírás! Az új szerveremen én is használni fogom! köszi szépen!!!