NC mod_rewrite
belépés
A módszer létrehozása NC (a mod_rewrite) és egy pár hasznos linkeket.
Légy tiszteletben spectator.ru prokopipestili mint száz alkalommal. És írok milyen módszerek vannak, nem fogom, hogy megteremtse a CNC.
Erre a célra egy speciális modul az Apache mod_rewrite úgynevezett. Ez lehetővé teszi, hogy „perepisyvyvat URL”, azaz, hogy azokat a „röptében” a szabályok szerint, hogy leírják vele.
Elég teljes dokumentáció megtalálható itt. De ez elég száraz, és azok, akik először szembesülnek a modul mod_rewrite, nehéz lesz megérteni.
Csak egy pár hasznos linkek, és ez elegendő:
Nem működik a modul mod_rewrite? Hogyan lehet ellenőrizni, hogy a modul csatlakoztatva?
ellenőrizze, hogy a modul telepítve van a web szerver
- Check Apache (httpd.conf) konfigurációs fájl
- Ellenőrizze a kiszolgáló példákkal. Ha a szerver fut hiba nélkül - mod_rewrite telepítve. Ha nem, akkor kap egy üzenetet, ha hív bármely web-oldal: „Internal Server Error”
RewriteEngine on - tartalmaz egy modult nélkül későbbi irányelvek figyelmen kívül hagyja.
Hogyan működik mod_rewrite
Irányelv - a csapat, amely szerves része a nyelvnek. Létrehozásához az NC gyakran két deriktivy: RewriteCond és RewriteRule.
RewriteCond - olyan állapot, ami működni fog RewriteRule.
RewriteRule - valóban átalakítja az URL-t, csak tartalmazza a feltétel (minta), amely az URL lesz «foglyul» és átalakításra.
A következő sor RewriteCond veszi a variábilis% (változó tartalmazza a teljes elérési utat a szerver fájlrendszer a fájlt vagy script, ez csak a mi esetünkben), és ellenőrizze a -f! ( «!» - nem, «-f» - szabályos fájl) . Dolgozott állapot (nincs ilyen «novaya_statya.html» file), megy előre.
Feltétel RewriteRule (az úgynevezett "Template" - szokni) van írva a formában regulrnogo kifejezést «^ ([^ /] *) html $.». A vonal tesztelése folyamatban van egy szabályos kifejezés (regex egyezést találtak, és mentse el a változó $ 1). Minden feltétel teljesül! RewriteRule átirányítani kérésünkre /index.php?page= novaya_statya
Sétáltunk a kód fentről lefelé, és működött, de a valóságban minden nem így van! Az első néhány bekezdésben a RTFM ami kifejezetten a mi módon egység még bemutatni az érintett rendszerbe. Meg kell emlékezni egy dolog: mod_rewrite eredetileg előbb a RewriteRule, nézi mintaillesztést egy reguláris kifejezés minta egy változóban tároljuk, amit akar, és aztán csak megy RewriteCond (megfelel a szabály átalakítás) és teszi állapotának ellenőrzésére. Azt is lehetővé teszi, hogy RewriteCond tartsa ellenőrzése, hogy emlékszik a reguláris kifejezés, és ez az úgynevezett visszajelzést.
Merev szerkezetet NC
Sokan egyszerűen nem:
És akkor a PHP elemezni QUERY_STRING a polcokon. De ez QUERY_STRING lehet kapni semmit tetszik, és akkor meg kell vizsgálni, minden lehetséges esetet. Igen, „minden eshetőségre” - utalás a reguláris kifejezések. Szerintem előre, hogy az NC találkozik a honlapomon. Miért nem használja a reguláris kifejezések a mod_rewrite és nem korlátozzák a logika motor helyén csak következtetni, hogy valóban létezik?
Amit hallott a „fészekrakó” oldalon. Rossz, ha a felhasználónak, hogy kattintson öt alkalommal kap egy „nyitóoldalnak”? Ez költség határig, majd a CNC megelőzésére /categor/subcategory/subsubcategory/subsubsubcategory/article.html. És ez nem új, azt mondom ...
Megfogalmazásában reguláris kifejezést mod_rewrite, fogása hibák
Azt felverték a teljes listát két részre, az «.html» és nélkülük, és írt két reguláris kifejezések (és talán nem kell csinálni, de nekem könnyebb volt így):
Minden URL, amely illeszkedik a reguláris kifejezés - fogják átalakítani. És a többi:
Sajnos hiba 404 az oldal nem található.
Tehát az én esetemben:
Minden más, akkor csatolja magát. Köszönöm a figyelmet.
Miért ez a kód nem fog működni a Apache 1.3, egy hiba. htaccess: RewriteRule: nem tudja lefordítani reguláris kifejezés '^ (:? ([^ / \.]) [/]?)? (:? ([^ / \.]) [/]?) $?', azaz Érvénytelen reguláris kifejezés. Hogyan kell módosítani, hogy működni fog a Apach 1.3?
Nagyon köszönöm, hogy ésszerű magyarázat! Anélkül, hogy a bírság áramkörök nem tudott .php kiterjesztés végén URL.
Vital: nem fogadott plusz jel után ^ (?: ([^. /], bár lehet, hogy ez az üzeneteket, plusz jel tisztítani ellenőrzése: ^ (?:. [^ /] () [/]) (?:? ([^ / .]) [/]?)? $