ugrás a tartalomhoz

Htaccess ismét.

therest · 2012. Aug. 12. (V), 20.23
Én nem tudom, hogy miért van ez, de rendszeresen elakadok látszólag triviális htaccess kérdéseken, és órákon át tartó webes keresés után, agyvérzés közeli állapotban már nem tudok jobbat mint ide írni, mert ha nem teszem tutira felrobbanok.

A következő htaccess mellett:

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /testdir/
RewriteRule ^(.*)$ index.php?page=$1 [R]
</IfModule>
Hívom a következő címet: http://valami.hu/testdir/parameter

A fenti htaccess egyszerűen nem működik, pontosabban elnavigál a
http://valami.hu/testdir/index.php?page=index.php címre, holott az eredeti urlben aztán sehol nincs "index" vagy "php".

Abban az esetben ha valami fix karaktert (például egy x-et) beleteszek már szalad:

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /testdir/
RewriteRule ^x(.*)$ index.php?page=$1 [R]
</IfModule>
Mitől van ez a működés? Miért nem működik az első verzió?
Hogyan lehet jól debugolni a htaccess hibákat. Próbáltam beállítani a következő sorokat httpg.conf fájlban de semmi hatás:
RewriteLog "x:/apache/logs"
RewriteLogLevel 5
 
1

Feldolgozás

Hidvégi Gábor · 2012. Aug. 12. (V), 21.04
Valami ilyesmi történhet:

http://valami.hu/testdir/parameter
http://valami.hu/testdir/index.php?page=parameter
http://valami.hu/testdir/index.php?page=index.php

Ha beteszed a RewriteRule elé ezt a sort:
RewriteCond %{REQUEST_URI} !(favicon.ico|robots.txt|sitemap.xml.gz|index.php)$
Akkor ezen fájlok esetén nem fog lefutni a szabály.

Az x:/apache/logs-ban a logs az nem könyvtár, ugye?
2

Valóban ez történt, köszi a

therest · 2012. Aug. 12. (V), 22.36
Valóban ez történt, köszi a tippet, eszembe nem jutott volna.
Akkor RewriteCond nélkül ezt nem is fogom tudni megoldani?
Arra valami ötlet, hogy ha ki akarok szűrni minden fájlt a feltételben, akkor mi a legjobb módja? (Ha pontot nem tartalmaz a {REQUEST_URI} ?)


A log könyvtárt elírtam az előző postomban:
RewriteLog "H:/Apache/logs/htacceslog.log"
RewriteLogLevel 9

Jogosultsági gondok voltak, arra menet közben rájöttem, és most már megy.
3

Több fájl

Pepita · 2012. Aug. 14. (K), 00.52
ha ki akarok szűrni minden fájlt a feltételben, akkor mi a legjobb módja?
A legjobbat nem tudom, de én pl. a design részeit (css-ek, képek, js-ek) egy erre a célra létrehozott (mondjuk "szabad" nevű) mappába rakom, a rewritecond-ban meg lehet adni mappanevet is. Elég a "szabad" könyvtár beírása, annak almappáin sem fog változtatni a rule.

Másik megoldás lehet, ha nem a teljes fájlnevet adod meg, csak pl. a kiterjesztést. Ha {REQUEST_URI} tartalmazza azt, hogy ".jpg", akkor ne írjuk át. Ez akkor jó, ha a kiterjesztésből egyértelműen kiderül a dolog.

Majd' elfelejtettem: Gábor példájában szerintem a pontok ("robots.txt") elé kell \ (backslash) is ("robots\.txt").
4

Köszi válaszokat! Ezt

therest · 2012. Aug. 14. (K), 11.22
Köszi válaszokat!

Ezt találtam:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

Elvileg ez szűri, hogy fájlnevekre, könyvtárakra ne vonatkozzon az átírás, átirányítás, elég egyszerűnek tűnik.
5

Igen, csakhogy

Pepita · 2012. Aug. 15. (Sze), 01.37
Ezzel igencsak kinyitod a kaput, hogy olyan könyvtárakba is "benézzenek", ahova nem szeretnéd... Illetve (!-f) bármelyik php fájlod futtatható lesz közvetlenül URL-ből, olvashatóvá válnak "titkos adatok", stb. Én emiatt ezeket nem használom.
6

Kifejtenéd, hogy ezek miért

therest · 2012. Aug. 15. (Sze), 09.57
Kifejtenéd, hogy ezek miért vannak így?

Nekem pl ez a htaccess a gyökérben van. Ennek ellnére pl a <root>/logs/ könyvtárra, egy http://valami.hu/logs/ hívással nem lehet ránézni, mert azonnal 403as error-t kapsz, de pl a http://valami.hu/mypage simán átíródik index.php?page=mypage -re és lefut.
Szerintem a többi is a szerver beállításaitól függ.
7

Egyszerű: ne bízz senkiben

Pepita · 2012. Aug. 15. (Sze), 23.29
Szerintem a többi is a szerver beállításaitól függ.
Igen, legalábbis az, hogy kilistázza-e egy adott (meglévő) könyvtár tartalmát, ha nincs benne olyan fájl, amit kiszolgálhat. Pl. van egy (3) ilyen sor az Apache httpd.conf-ban:
<IfModule dir_module>
    DirectoryIndex index.php index.html index.htm
</IfModule>
Ekkor, ha olyan könyvtárra hivatkozol (URL-lel), amelyikben nincs index.php, ... nevű fájl, akkor vagy kilistázza a könyvtárat, vagy nem. Ez szintén a httpd.conf-tól függ, amihez - ha nem saját szervered van - te nem férsz hozzá. (Ha jól gondolom ez az Options Indexes direktívá(k)tól függ, de Apache-ból nem vagyok jó.)
Tehát, ha a rendszergazdi gondol egyet és megváltoztatja az Apache beállításait, akkor tárva-nyitva minden. (Velem történt már ilyen, egy szó nélkül változtattak - mondjuk a korábbi listázásról a tiltásra. De ez mutatja, hogy fordítva is történhet.)

Tehát mindig, mielőtt bármi lényeges "nem publikus" tartalmat feltöltesz a szerverre, többszörös akadályt kell képezni az illetéktelen hozzáférések elé. Ugyanez vonatkozik arra is, ha Rewrite...-ot kezdesz használni.

Én a következőeket mindig elkövetem minden "nem publikus" könyvtárban:
- Teszek bele egy index.html fájlt, valami 403-as dumával vagy mással (ugye az is Apache conf-tól függ, hogy feldolgozza-e az én .htaccess-eimet!). Ezt jelenítse meg, ne listázzon.
- Teszek bele .htaccess-t is: Deny from all.
- A gyökérkönyvtár .htaccess-ben a fentebb említett engedélyezett könyvtár(ak) szisztémát alkalmazom, a -f, -d helyett.
- Az igazán kényes dolgokat lehetőleg a domain gyökerén kívül tárolom, és/vagy nagyon-nagyon eldugva.

Ezen kívül persze van még sok jó megoldás - én sem írtam le mindent -, a lényeg az, hogy minél több lábon álljon a "biztonság" (már amennyire lehet a weben biztonságról beszélni). Ja, és nagyon jó még az, ha olyan fájljaid vannak, amikre "nem kíváncsiak" a tréfás kedvű próbálkozók / robotok. A motiváció hiánya a legjobb védelem.

Üdv. Pepita

Szerk.: a 403 hibáról még annyit: nem feltétlenül jó elárulni a próbálkozónak, hogy a kért könyvtár létezik, csak joga nincs rá. Erre jó az egyéni oldal, amin lehet úgy írni pl., hogy nincs ilyen és kész.
8

Hasznos infók, köszi hogy

therest · 2012. Aug. 16. (Cs), 11.20
Hasznos infók, köszi hogy megosztottad őket, figyelembe fogom venni.