udvozlet!
szerk: redukaljuk a problemat:
apache(2) azt csinalja alapbol (legalabbis debian/lenny alatti alapertelmezett beallitas, de mashol is lehet latni), hogy egy
http://vala.hol/konyv/tar
cim begepeleskor egy R=301-el ter vissza, es atiranyit a
http://vala.hol/konyv/tar/
cimre, majd teszi a dolgat tovabb (directoryindex, listing, stb). ezt hogyan lehet kikapcsoni a fenebe? (azaz az apache csak siman tegye a dolgat, es ne terjen vissza R=301-gyel?)
erdeti problemakor: (( a problema-sorozat a kovetkezo", ha valaki tudna segiteni es/vagy latott ilyesmit:
1. (hatter) talan ismert jelenseg: apache(2) azt csinalja alapbol (legalabbis debian/lenny alatti alapertelmezett beallitas, de mashol is lehet latni), hogy egy
http://vala.hol/konyv/tar
cim begepeleskor egy R=301-el ter vissza, es atiranyit a
http://vala.hol/konyv/tar/
cimre, majd teszi a dolgat tovabb (directoryindex, listing, stb).
2. (hatter, kozelebb a problemahoz) mod_rewrite: egy teljes
RewriteRule ^(.*)$ ...
direktivanak az lenne a dolga, hogy minden kerest felulirjon ugy, ahogy. pl erre, hogy
index.php?query=$1 [L,QSA]
, ez oke.
3. (megkozelebb a problemahoz) ha $1 egy letezo" file kiterjesztes nelkul, akkor ezt a fentebbi rewrite-t nem hajtja vegre. oke, ez kikapcsolhato egy
-MultiViews
opcioval.
4. (a problema) azt kellene csinalni, hogy a fentebbi rewrite-t egy
/static
konyvtar kivetelevel kene megcsinalni. nosza:
RewriteCond %{REQUEST_URI} !^/static/.*$
. ez teljesen jo, leszamitva hogy a
/static
(a vegen / nelkul) kivetelevel nem mukodik. ez viszont nagyon nem: a (3) pont ellenere az (1) pont me'g eletben van, a (2)-t pedig reszlegesen alkalmazva egy teljesen patetikus
/static/?query=static
-t ad vissza a rewrite utan mindezt R=301-gyel (valoszinuleg biztos, mert a bongeszo url-jet felulirja), es a (4)-est barhogy kiegeszitve sem gyogyul meg, raadasul valahogy mintha osszetenne' a kis agya'ban a directoryindex opciot (i.e. tkp hogy a (2) pontban index.php-t adok meg az mindegy, lehetne akar az pl main.php is). kerdes: ezt hogyan lehet athidalni? ))
thx, a.
- 1323 megtekintés
Hozzászólások
A problemat nem teljesen ertem, de amit leirtal, az nem bug, hanem feature, es a mod_dir nevu apache modul csinalja: ha a request egy konyvtar, ami letezik a filerendszeren, akkor nyom egy redirectet, majd ugyancsak a mod_dir megnezi, hogy van-e a konyvtarban olyan file, ami fel lett sorolva a directoryindex direktivaban. Ha van, akkor kiszolgalja, ha nincs, akkor jon a kovetkezo modul.
Amit 1-4ig leirtal nekem eleg kodos, ha megprobalod ujrafogalmazni, szerintem valaszt is fogsz kapni.
- A hozzászóláshoz be kell jelentkezni
az nem bug, hanem feature, es a mod_dir nevu apache modul csinalja:
igen, sikerult ezt megtalalni:
DirectorySlash Off
, de az eredeti probleman nem segitett...:/
Amit 1-4ig leirtal nekem eleg kodos, ha megprobalod ujrafogalmazni, szerintem valaszt is fogsz kapni.
huh, igen, akkor ezt ujra: szoval a lenyeg az, hogy ha teljesul RewriteCond-ban megfogalmazott tagada's e's nincs a(z egyebkent letezo,
/static
nevu") konyvtar neve utan egy slash, akkor furcsa dolgot csinal: a
vala.hol/static
url-bo"l
vala.hol/static/?query=static
url-t csinal, me'g akkor is, ha a teljes konyvtarra ki van kapcsolva ez a
DirectorySlash
opcio...
- A hozzászóláshoz be kell jelentkezni
egy apro problema elojott, a fentiekhez kapcsolodoan. van egy http://doma.in/page/ oldal, amiben van egy ilyen htaccess, egy mod_rewrite szaballyal kiegeszitve:
Options -Indexes
DirectorySlash Off
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/page/static/.*$
RewriteCond %{REQUEST_URI} !^/page/static$
RewriteRule ^(.*)$ index.php?query=$1 [L,QSA]
</IfModule>
mindez teljesen jol mukodik, a http://doma.in/page/vala/mi kereseket forditja az index.php-nek, $_GET["query"]="/vala/mi"; ertekekkel. nomarmost ez az egesz nem mukodne, ha directoryslash be lenne kapcsolva (lasd eredeti problema, feljebb), tehat ez igy kell. az indexet is tiltjuk, biztonsagi okokbol, nyilvanvaloan.
egyetlen apro problema van: ha a felhasznalo azt irja be a bongeszobe, hogy http://doma.in/page. azaz nincs a page utan "/". ekkor a kliens kap egy 403:forbidden-t. nomarmost azt hogyan lehetne elerni, hogy igy is jol mukodjon? ha +Indexes van, akkor ilyenkor kilistazza a konyvtarat, amit nyilvan nem akarnank. ha eggyel feljoebb (doma.in virt host documentroot-jaba) teszek egy htaccess-t egy olyan mod_rewrite szaballyal hogy a /page uri-bol csinaljon /page/-t, akkor az hatastalan. otlet, erre? koszonettel, a.
- A hozzászóláshoz be kell jelentkezni
up?
megneztem kozben hogy a nagyok hogy csinaljak: a drupal htaccess-enek pl olyan hatasa van, hogy egyreszt bekapcsolva hadja a directoryslash-t, viszont minden file-t kitilt. azaz ha http://doma.in/page/letezo/file-t irok be akkor dob egy access denied-et, viszont ha mondjuk http://doma.in/page/nemletezo/nemfile-t, akkor meg csinalja a standard processinget. ez meg utkozesekhez vezethet. pl ha veletlenul csinalna valaki egy drupal.hu/includes-t?
- A hozzászóláshoz be kell jelentkezni