A reguláris kifejezések szerepe igen jelentős az átirányítások alkalmazása során. Idézzük fel még egyszer az előző fejezetből, hogyan is írunk meg egy konkrét átirányítást:
RewriteRule ^index2\.html$ index1.html RewriteRule ^index3\.html$ index1.html [R]
Az átirányított index2.html megadásakor 3 furcsaságot is találtunk:
^ jel az index2.html előtt $ jel az index2.html után \ jel a pont előtt
Ezen jeleknek speciális jelentése van. A ^ jelzi az "illesztendő" kifejezés elejét, a $ a végét, a \ pedig azért kell, mert a pontnak van egy olyan speciális jelentése, hogy ha nincs előtte \ , akkor rá minden karakter illeszkedik.
Nézzünk ezt konkrét példán keresztül. Az átírások és átirányítások fejezetben megadott, ide is bemásolt két linken a fenti módon állítottuk be az átirányítást.
/redirect1/index2.htmlEgy másik könyvtárban ugyanezt a \, $ és ^ jelek nélkül, az alábbiak szerint állítottam be:
RewriteRule index2.html index1.html RewriteRule index3.html index1.html [R]
Ellenőrizzük le, hogy működik-e így is az átirányítás!
/redirect3/index2.htmlHa megnyitottuk a linket, azt tapasztaljuk, hogyz is működik, ugyanúgy az index1.html-t nyitja meg, úgyhogy elsőre úgy tűnhet, hogy minden ugyanaz. Biztos, hogy ugyanaz? Ellenőrizzük le egy kicsit másképp!
/redirect1/ujindex2.html
/redirect3/ujindex2.html
Hoppá, itt már eltérés van! Ha nem pontosan index2.html-t írunk be, hanem az elejére teszunk valamit, es ujindex2.html-t írunk be, akkor az első esetben nincs átírás, és nem létező hibára fut a link, a második esetben viszont van, megtörténik az átirányítás. Az ilyen jellegű átirányítás sokszor szándékos, de sokszor úgy is előfordul, hogy egyáltalán nem ez volt a cél. Ezért mindenképp figyeljünk arra, hogy pontosan azt adjuk meg, ami a cél!
Az átirányítások szempontjából a legfontosabb szabályok:
Kifejezés | Jelentés | Példa |
---|---|---|
^ | kifejezés kezdete | ^nap - minden nap-pal kezdődő szó, pl. nap, napos, nap123 stb. |
$ | kifejezés vége | ma$ - minden ma-val végződő szó, pl. ma, mama, jatszma, ima stb. stb. |
+ | Előtte levő karakter vagy zárójeles kifejezés legalább egyszer | alma1+ - Ennek pl. megfelel az alma1, alma11, alma111111, de nem felel meg az alma, alma113 |
* | Előző karakter vagy zárójeles kifejezés legalább nullaszor | alma1* - Ennek pl. megfelel az alma, alma1, alma11, alma111111, de nem felel meg az alma2, alma113 |
? | Előző karakter vagy zárójeles kifejezés pontosan 0 vagy 1 alkalommal | alma1? - Ennek megfelel az alma és az alma1, semmi más nem |
. | Bármilyen karakter, 1 darab | s.kk - Ennek megfelel pl. a sakk, sekk, sokk, swkk, s7kk |
\ | Védőkarakter, az utána jövő karakter normál módon viselkedik | A \* felel meg a * karakternek. Ha \ nélkül használnánk, akkor a fentebb írt speciális jelentése lenne. A \\ felel meg egy darab \ karakternek |
( ) | 1. Karakterek egységként kezelése 2. Változóba mentés | (ma). - A "ma"-ra vonatkozik, hogy minimum egyszer létezik, azaz megfelel neki a ma, mama, mamama, mamamamamama, stb. |
[ ] | Egy darab karakter a felsorolt karakterosztályból | [123] - 1, 2 vagy 3 karakterek egyike [A-Za-z0-9_] - az angol abc kis és nagybetűi, a számjegyek és az aláhúzás karakter |
- | []-en belül, ha mindkét oldalán van karakter, tartomány a - két oldalán lévő értékek között | [A-Za-z] - az angol abc kis és nagybetűi |
^ | []-en belül negálás, a mögötte megadott adatok inverze | [^0-9] - Bármilyen karakter, kivéve a számjegyeket |
[*+?.] | []-en belül az egyébként speciális karakterek saját magukat jelentik | [*+?.] - Egy darab tetszőleges karakter a * + ? . közül |
A reguláris kifejezéseknek nagy irodalma és igen kiterjedt használata van. A fenti alapszabályokkal rendkívül bonyolult kereső kifejezéseket is létre lehet hozni. Ha mélyebben érdekel a téma, az interneten rengeteg ezzel foglalkozó szakirodalmat lehet találni, de nekünk egyelőre elég a fentiek ismerete.