Apache htaccess engedélyezése

Apache HTTPD szerverekben az alapértelmezetten ".htaccess" nevű fájlokban lehet bizonyos szerveroldali, könyvtárfüggő konfigurációkat végezni, amikben a szerver újraindítása nélkül életbe lépnek. Az erről szóló leírások többnyire felsorolás-szerűek és kevéssé pontosak, nem világosak. Megpróbálom érthetően leírni, hogy bírhatjuk működésre.

Nem a htaccess-t engedélyezzük

Bár a címnek azt adtam, amivel megnevezzük legtöbbször a problémát, valójában nem a htaccess-t engedélyezzük, hanem az abban felülírható szerverbeállításokat határozzuk meg. Amit meg lehet adni úgy is, hogy semmit sem lehet felülírni, és úgy is, hogy bármit. Amit ritkábban említenek a leírások, hogy lehet válogatni is, és csak bizonyos felülírásokat engedélyezni.

Mivel engedélyezem az opciók felülírását?

Erre az "AllowOverride" direktíva való. Ez az, aminek ha "None" az értéke, akkor gyakorlatilag "letiltjuk a htaccess"-t. Ha pedig "All", akkor mindent engedélyezünk vele.

A különböző direktívák csoportosítva vannak. All vagy None helyett egy csoport nevét is meg lehet adni. Ha valami oknál fogva nem akarunk mindent engedélyezni, utána kell nézni az adott Apache verzió dokumentációjában, hogy melyik direktíva melyik csoportba tartozik, majd azt az egyet engedélyezni.

Minden engedélyezése

AllowOverride All

Minden letiltása

AllowOverride None

Egy csoport direktíváinak engedélyezése

AllowOverride CsoportNeve

Vagyis a FileInfo csoport esetén, amibe a "mod_rewrite" direkívái is beletartoznak:

AllowOverride FileInfo

Hova tegyem az AllowOverride sort?

Bármelyik konfigurációs fájlba, ami betöltődik az Apache-ban. Viszont bele kell tenni egy Directory blokkba, ahol megadjuk, hogy ez az engedély melyik könyvtárra és annak alkönyvtáraira legyen érvényes.

A konfigurációs fájlok helye és száma, elosztása szerverkialakításonként változó. De egy httpd.conf azért mindig van. Esetleg egy apache.conf. Lesz itt már több directory blokk is. Vagy egy olyanba kell betenni az AllowOverride -ot, amelyiknél a könyvtár neve a szerver gyökérkönyvtára, vagy létre kell hozni egy új blokkot. A virtuális gépen az eredeti beállításokat csak minimálisan változtattam. És a httpd.conf végére írtam az új beállításokat. A httpd.conf végén a "/var/www/" gyökérkönyvtár esetén így nézne ki az összes felülírás engedélyezése:

<Directory /var/www>
   AllowOverride All
</Directory>

Ez a kódrészlet kerülhet egy virtuális hoszt definíciójába is annak gyökérkönyvtárát megadva a /var/www helyett.

Mindig a gyökérkönyvtárat kell megadnom?

Nem! Bármilyen könyvtárat meg lehet adni a Directory blokknak. Ha a gyökérkönyvtár feletti útvonal van megadva, akkor a szerver a gyökérkönyvtár feletti .htaccess-ekben levő beállításokat is figyelembe veszi. Mivel ilyen blokk több helyen is lehet, hiba esetén érdemes utánajárni, hogy hol vannak az adott könyvtárra érvényes Directory blokkok. Például hiába van engedélyezve valahol minden, ha aztán bent marad egy olyan blokk, amiben letiltunk mindent akár egy alkönyvtárban.

Jó AllowOverride, mégis Internal Server Error

Bizonyos direktívák modulok engedélyezésétől függenek. A "RewriteRule" például igényli a "rewrite" modult (mod_rewrite). Ha a modul nem létezik, újra kellhet fordítani az Apache szervert. Ha létezik, de nincs engedélyezve, akkor engedélyezni kell. Ami az adott modulfájl betöltését jelenti.

mod_rewrite engedélyezése

Modul bekapcsolása fordításkor

Az Apache szervert az "--enable-rewrite" kapcsolóval kell fordítani. Apache 2.2-ben statikus modulként fordul bele a szerverbe minden modul. Ha szeretnénk .so kiterjesztésű fájlba fordítani a modult, akkor az "--enable-rewrite=shared" módon kell használni a kapcsolót.

Létező modul betöltése

Ha már létezik a modul .so fájlban a telepített Apache "modules" könyvtárában, akkor

LoadModule rewrite_module modules/mod_rewrite.so

RewriteEngine

Az egyik direktíva a mod_rewrite -ban a "RewriteEngine". Amikor egy htaccess-ben a Rewrite modul direktíváit szeretnénk használni, mint a RewriteRule, akkor ezzel kapcsolhatjuk be. Egyéb esetben a szabályok figyelmen kívül lesznek hagyva. Tehát:

RewriteEngine On
# ez után jöhetnek az URL-manipulációk

Apache 2.4 újdonsága: AllowOverrideList

2.2-es Apache szerverben az AllowOverride -dal csak direktívák csoportját engedélyezhetjük. 2.4-től viszont egyenként is lehet egy direktívát engedélyezni.

AllowOverride None
AllowOverrideList RewriteEngine RewriteCond RewriteRule Redirect RedirectMatch

A ".htaccess" a fájl neve. Nem csak a kiterjesztése. A használt fájlnév azonban felülírható az "AccessFilename" direktívával.

Windows 7 -ben nem lehet ponttal kezdődő fájlt létrehozni egyszerűen. Mivel a pont után kiterjesztést várna. És üres fájlnévre hivatkozva nem engedi elmenteni a fájlt. Megoldás, hogy a fájlnév végére is teszünk egy pontot. Ezt a pontot a Windows 7 automatikusan eltávolítja, tehát nem marad a névben. De el engedi menteni a fájlt.

Források

Kategóriák: 
Megosztás/Mentés