Debug RewriteRule szabályokat, vagy egy kicsit a bensőséges élet mod_rewrite
Azt RewriteEngine mindig elég stresszes témát. Csak nemrég hirtelen úgy találta, hogy minden valahogy telepedett le, és vált többé-kevésbé világos. Mivel én elég egy hétköznapi ember, biztos vagyok benne, hogy a konfigurációs hiba helyzet a webszerver „kap”, és nem vagyok egyedül sietek, hogy megosszák egymással tapasztalataikat.
Kiderült, valami között útmutatást használata mod_rewrite modul, és egyfajta útmutató konfigurálása a webkiszolgáló segítségével a .htaccess fájlt. Az út mentén, szeretnék összpontosítani különösen nehéz vagy nem egyértelmű pontokat.
A kiindulási adatok kísérletek
- Minden kísérletet végeztünk a helyi gépen.
- Telepített szerver lampp
- Apache Verzió: 2.4.9 (Build Unix)
- A mappa / opt / lampp / htdocs / BBB / _engine egy tapasztalt helyszíni engine.bbb.ru tartományban. Ez egy gyökér könyvtárban (DocumentRoot).
- A gyökérkönyvtárában a helyszínen csak egy oldal ind.php.
- Az oldalon van egy mappa / opt / lampp / htdocs / BBB / _engine / local.
- Ez egy script fájlt ind1.php
Konfigurálása virtuális gépeket
Hogy könnyebb futni, hibakeresés, és csóválják az idegek, ahol nem tudja, jó lenne, hogy hozzanak létre a virtuális gépek szempontjából kényelmét. Tekintsük a legegyszerűbb konfiguráció, ami nagyban megkönnyíti az életünket.
konfigurálása rönk
Kevesen a helyi gépen csak egy domaint. Domains általában sokkal. Jó lenne megosztani a naplókat a tartomány és a napok, hogy nem nő túl. Ez úgy történik, egy szakasza, a szerver konfigurációját.
A bejelentkezéshez hibákat a domain, adjuk hozzá a következő két sort.
Az első a neve a hibanaplót virtuális szerver és teszi induló új napló minden 86.400 másodperc. Rotatelogs egy olyan program, amely általában tartalmazza az Apache webszerver, és remélem, hogy van ez is telepítve van.
A második sor adja meg a méret az egyes vonalon a hiba napló. A részletek megtalálhatók a dokumentációban az Apache szerver. Van mind nagyon világos. Ebben a cikkben fontos, hogy csak szem előtt tartani, hogy a formátum van beállítva.
Ahhoz, hogy a napló I csak egy sort. A formátum a „default” vonal Én általában boldog.
Mindkét esetben vegye figyelembe az utat a webkiszolgáló programok és a naplók. Telepíteni kell a útvonalakat, hogy létezik a számítógépen.
A legtöbb általános információkat hogyan működnek a dolgok
a .htaccess fájlban. kik fogják kezelni ezt a mappát. Ezen kívül van más alábbi sorokat ezen irányelv és bizonyos szabályok újraírása.
Tegyük fel, hogy a szerver megkapja az input egy URL-t. RewriteEngine kezdődik ez az URL segítségével ellenőrizni szabályokat. Ő csinálja fentről lefelé sorrendben. Ha a bejövő URL nem felel meg semmilyen szabályt, azt nevezzük „pass”. Tegyük fel például, hogy van a gyökér könyvtárban az index.php fájlt. Ha a bemeneti Uri „/index.php” nem felel meg semmilyen szabályt, látni fogjuk, a böngésző kimenet a szkript.
Ha már a következő szabály
nyilvánvaló, hogy ez a szabály «index.php» Uri munkát. Ebben az esetben, Uri lesz átírt „” és az új uri „/” fog küldeni a bemenet kiszolgáló. És az egész folyamat a szabályok alkalmazásának megy újra. Csak akkor, ha az uri „/” nem felel meg sem a szabály, hogy azt látjuk, amit akarunk. És ha megfelel, akkor lehet újraírni, újra és újra minden elölről.
Hogy a zászló [L]
Valószínűleg ez a zászló teszi különösen a sok félreértés. A jelenléte a zászló megakadályozza Uri tesztbemenettel a következő szabályok szerint neki, ha ezt a szabályt dolgozott. Ez minden. Azaz, ha a Uri «index.php» tesztelték (általában dolgozott vele), akkor azért, mert a jelenléte a zászló [L] azt megszakítja minden későbbi ellenőrzések, és a web szerver azonnal termel átírta «index.php» -> „” és kap input uri „/” ([belső átirányítás)], és ez ismétlődik a kezdetektől, az első szabály. Ha ez a jelző nincs jelen, akkor az újraírás még folyik, és ellenőrzés folytatódik a következő szabályt. De Uri fog változni, és ez „/”.
Megérthető a folyamat azonnal megakadályozza a sok ciklikus átirányításokat.
De hadd, hogy fent leírt azt jelenti, hogy ha nem használja a zászló [L], akkor időt takaríthat meg, és az oldal hamarosan megnyitja kapuit? Találkozunk a zászló [L] és meg kell felelnie ismét minden a szabályok, kivétel nélkül, és ha nem tesz a zászló [L], akkor ezt fogjuk tenni a újraírás szabály megbotlott, majd megy a végére az összes szabályt, és ezen a végén?
Megnéztem. Ez nem működik. Ennek hiányában flags [L], a modul, mint várható volt, hogy cserélje ki Uri kioldott szabály, megy az összes többi szabályokat, hogy a végén, akkor termel [belső átirányítás], és még mindig fut, hogy ez Uri minden szabályt újra. Ezt támasztja alá, amit fentebb írtam. Ez a szabály úgy tűnik, hogy nincs kivétel.
Következtetés: minden alkalommal, amikor egy szabály váltotta ki a RewriteRule van [belső átirányítás] és ismételt alkalmazása az összes szabályt. Ezt a második utat kezdődik meg azonnal a szabály alkalmazását a zászló [L], vagy az után elfogyott az összes szabályt, a munkát, ha nem flags [L]. „Pass” helyzet vágás, egy úgy nevezett «átmennek» csak akkor fordulhat elő, ha nincs szabály alkalmazására nem került sor. Flag [L] valóban csökkenti a feldolgozási időt Uri és fel kell használni, ahol csak lehetséges.
Mi RewriteBase?
Ez a megállapítás, véleményem szerint, a rekord az érthetetlen! Adnék neki ezt a díjat! Tekintettel erre, van két történeteket az állat - rövid és hosszú. Rövid történet azoknak, akik nem akarnak bajlódni, hogy ezeket az utasításokat. Hosszú az érdeklődők számára.
elbeszélés
Ha egy viszonylag egyszerű URL-átírása segítségével .htaccess fájlt, azt javasoljuk, hogy mindig a következőképpen kell eljárni.
- Ne használjon le az irányelv egyáltalán.
- Minden szabály a cél átírásához mindig kezdeni egy perjel (jelezve, hogy Uri képest a gyökér a helyén)
hosszú történet
A következő folyamatok fordulhatnak elő újraírása:
- Document Root: / opt / lampp / htdocs / bbb / _engine
- A .htaccess fájl ott van, a Document Root
Kérünk URL engine.bbb.ru/ind.php
- Szolgáltatás újraírás vezet az út a kért fájl elérési útját a fájlrendszerben, nevezetesen az opt / lampp / htdocs / BBB / _engine / ind.php
- Vegye ki azokból előtag opt / lampp / htdocs / BBB / _engine / (egybeesik az utat, hogy a mappát, amely abban rejlik, .htaccess)
- Alkalmazandó szabályok újraírása felhasználásával «ind.php» vonalon
Ha a mappa / opt / lampp / htdocs / BBB / _engine / local nincs .htaccess fájlt vagy ott, de ez nem szerepel RewriteEngine
- Kérünk URL engine.bbb.ru/local/ind1.php
- Szolgáltatás újraírás vezet az út a kért fájl elérési útját a fájlrendszerben, nevezetesen az opt / lampp / htdocs / BBB / _engine / local / ind1.php
- Vegye ki a prefix opt / lampp / htdocs / BBB / _engine /
- Szabályait fogja alkalmazni az újraírás, egy húr «helyi / ind.php»
- Kérünk URL engine.bbb.ru/local/ind1.php
- Szolgáltatás újraírás vezet az út a kért fájl elérési útját a fájlrendszerben, nevezetesen az opt / lampp / htdocs / BBB / _engine / local / ind1.php
- Vegye ki a prefix opt / lampp / htdocs / BBB / _engine / local / (ez a mappa elérési útját, ahová a fájlt .htaccess a / helyi)
- Alkalmazandó szabályok újraírása felhasználásával «ind1.php» vonalon
Figyelem! Ez az algoritmus kerül végrehajtásra mindig. Ez az algoritmus különleges tulajdonságát fejezi ki az a „per-dir”, azaz „a vezető” megközelítés rejlő kiszolgáló Apache. Jelentés RewriteBase irányelv tette (az algoritmus) nem érinti.
Ugyanezen a hatás RewriteBase irányelv?
Meg kell nagyon jó tudni, hogy az irányelv RewriteBase megadott URL! Nem adhatja meg, ha a „helyi /” Tévedés! Csak akkor „/ helyi”.
Legyen a mi /opt/lampp/htdocs/bbb/_engine/local/.htaccess utaltunk
Kérünk URL engine.bbb.ru/local/
Ez működik! És ez lesz az átmenetet Uri /local/ind1.php
is működik, de az átmenet kerül sor az Uri /ind1.php. A fájl nem található! Ilyen Uri (helyhez viszonyítva gyökér), mi nem!
1. következtetés: URL, amit jelezze RewriteBase adunk előtagot, hogy a cél az Uri ha relatív, hogy van, az elején van egy perjel.
2. következtetés: ha soha nem használja relatív cél Uri a szabályokat, akkor az irányelv RewriteBase nem kell!
3. következtetés: Ha használjuk «RewriteBase /», akkor a szabály tehát
Megkísérli elmúlik az Uri /ind1.php. Egyszerűen kezelhető „/” előtag.
Megvan a következő szabályokat RewriteEngine a gyökér .htaccess:
Ha RewriteBase van urlom, majd állítsuk be
Nem. Ez nem megy. Hiba „RewriteBase: argumentum nem egy érvényes URL”. Furcsa, nem? De nem adjuk fel! Változás RewriteBase!
Ebben az esetben nincs hiba! Amit folyik a módja? Sok érdekes!
A szerver kap egy tisztességes módja az / opt / lampp / htdocs / BBB / _engine /. eltávolítja a prefix / opt / lampp / htdocs / BBB / _engine /, és működik egy üres string ( '').
Találkozunk a szabályt, és az üres vonal „ind.php”
Őszintén hozzá az előtag „//bbb.ru”, és menj a következő lépés. Ez a második szakasz egyenértékű hívó engine.bbb.ru//bbb.ru/ind.php. hogy nagyjából nem az, amit akartunk (ez volt az eredeti vágy skaknut másik oldalon). Röviden, az ötlet nem kifizetődő. Ennek eredményeként, van egy 404, ami logikus. By the way, „//” vagyunk a folyamat átírta a szerver helyett „/”. Felkutatását Ezt a példát jóval alacsonyabb.
Megvan minden lélegzetelállító részleteket az intim élet a Apache szerver? Vagy végül hibakeresés
Tényleg! Láttam egy hiba, amely szolgáltatás átnevezni URL-eket? Elvégre ez egy hibakereső! Van néhány nagyon hasznos iránymutatásokat, amelyek tettem egy virtuális host domain engine.bbb.ru. nevezetesen,
És mi az a „figyelmeztetni”? Szó mi LogLevel bejegyzés azt jelenti, hogy az összes modul figyelmeztesse hibaarány, és csak átírni modul - trace4
Amit kapunk eredményeként felvétele hibakeresés?
Gondolom újraírás felkutatása a következő feltételekkel:
Hibakeresés érvényes a virtuális host, amely
Ha engine.bbb.ru domainje külső css stílusokat venni a domain bbb.ru. és ez a probléma, akkor nem tartalmazza a hibakeresés a virtuális engine.bbb.ru szerver, és fel kell tüntetni a virtuális szerver bbb.ru. Ezután az összes hívás a domain bbb.ru kell nézni a hibanaplók (nem jut!) Bbb.ru. domén Ebben az esetben felhívja a nyomon objektum nincs a hozzáférési naplók egyáltalán!
És nem tudja használni, mint egy stresszes RewriteEngine egyáltalán?
Meg lehet váltani a csak egy script az egész hely, és a teljes újraírása is. A PHP csinálni könnyebb, és a hibakeresés sokkal könnyebb. Amellett a nyilvánvaló előnye a biztonsági kérdéseket a helyszínen, megkapjuk a kényelem a szóváltás újraírása. Menni egy ilyen rendszer a munka, a .htaccess kell, mint ez:
És a script dispatch.php Erősen ajánlott, hogy ne felejtsük el, hogy letiltja a közvetlen könyörgése a dispatch.php.
Ha hirtelen szeretné, hogy ez a megközelítési mód, akkor azt ajánlom, egy script dispatch.php nevezett valami más módon. Régebben ez a cím csak illusztratív célokat szolgál.
By the way, ez a megközelítés végrehajtása folyamatban van elég aktívan. Hogy mi kell hálás bevezetése CNC (URL, ember által olvasható, de nekem személy szerint nem világos). Gyakorlatilag ez már hatályos minden modern motorok.
Átvágni D-Link DIR-890L
Az elmúlt 6 hónapban én már borzasztóan elfoglalt és nem követi az új szar a D-Link. Ahhoz, hogy egy kis móka, mentem a saját honlapján, és én fogadta ezt a rémálmot: a legőrültebb router D-Link DIR-890L $ 300 Talán a legtöbb „őrült” a router, hogy fut mindegy zabagovannoy firmware-t, D-link jogutódai
Automatikus összeállítás csomagok CMS Joomla!
Mielőtt elkezdtem dolgozni a jelenlegi projekt, én nem hiszem, hogy valaha is kell használni eszközöket automatikusan építeni projekteket. Végülis, a munka kizárólag az értelmezett nyelvek, amelyek nem igényelnek összeállítása. Azonban, mint kiderült, ezek hasznosak lehetnek a fejlődő PHP és különösen akkor, ha a Joomlával dolgozni
Saját változata .htaccess
Az egyik korábbi bejegyzéseit a tematikus .htaccess kezdőknek, szeretném ajánlani a saját verzióját a különböző kezelések és tilalmak, és strukturálása bizonyos logika, de a karma volt a piros, akkor a spread most. A figyelmet, hogy az én Peer URL feldolgozási szabályok magyarázatokkal és kommentárok a „miért?”.
DDOS-bot PHP sétál szervereken
Ma körülbelül két órakor, amikor akartam menni aludni, én voltam a Skype írta egyik barátjának. Tavaly, segítettem neki beadni néhány szerverrel. Ilyen késői órán, azt írta, hogy a hálózati interfész az egyik a szerverek teljesen eltömődik ítélve mrtg ütemtervet. Néztem, tényleg, én nem is éri