Directory index forbidden by options directive

Sziasztok!

Egy érthetetlen probléma előtt állok! A kérdésem az volna: Van egy szerverem ezen belül van a /www könyvtár ebbe le van tiltva, hogy url-n keresztül bármelyik könyvtárat is elérhessék azaz csak azt a könyvtárat érik el amiben van index.php | index.html tehát van az adott könyvtár /www/oe_pics és erre megyek szépen be is tölti az index oldalt viszont nem megy phpval a könyvtár listázás azaz megy csak ezt írja ki, hogy "Directory index forbidden by options directive" de ezt csak egy adott divnél írja ki! AZért kéne az adott divbe beletennem mert azt külön még formázom.. de egyszerűen ha abba teszem akkor forbiddent ír ki. Miért van ötletetek?!

Hozzászólások

Nem értem miért írja ki egyáltalán ha divbe teszem ezt ha nincs divbe akkor simán megy minden! Már mint a könyvtárlistázás

Újra csináltam az egészet! Most kilistázza a képeket az adott div-be viszont az error logba mindig kérésnél kiírja a következőt

[Tue Nov 30 17:37:24 2010] [error] Directory index forbidden by Options directive: /www/oe_pics/proba/

Ez miért történhet?!

Miért lehet? Rossz konfig, rossz programozói hozzáállás.
1. eleve NEM keverjük a megjelenést a logikával
2. ha külön mappában vannak a megjelenítéshez szükséges fileok, és külön az azokra hivatkozó logika, könnyebb az apacheot biztonságosan beállítani.

Apropó. Mi van beállítva most?
httpd.conf-ban (Directory direktívánál)?
vhostban (ha van)?
.htaccessben (ha van)?

Ebben a mappában nincsen htacces file-om mindent a sites available/default fájlban állítok, ebbe a következő beállítások vannak:
Az adott mappára nincs beállítás konkréten! Azt hittem úgy működik ezaz "-Indexes FollowSymLinks" hogy ahol megvan az index fájl ott mindent engedélyez! De mondom érdekes h error logba kiírja h forbidden közbe meg kilistázza..?!

<------>DocumentRoot /var/www
<------>Directory /
<------><------>Options -Indexes FollowSymLinks
<------><------>AllowOverride None
<------>/ Directory
<------>Directory /var/www/
<------><------>Options -Indexes FollowSymLinks MultiViews
<------><------>AllowOverride None
<------><------>Order allow,deny
<------><------>allow from all
<------>/ Directory

Ha azt látod, hogy Directory index forbidden by options directive, akkor nyilvánvalóan nem futott le az index.php-d. Biztos ott van a kért könyvtárban, és olvasható és DirectoryIndex direktíva be van rá állítva?

Azzal fogalmam sincs mit akarsz mondani, hogy "nem megy php-val a könyvtár listázás", mert az apache általi könyvtár listázásnak meg a php-nak sok köze nincs egymáshoz. Melyik könyvtárban van a php, melyik könyvtárat nyitod meg a böngészővel?

Bocsi teljesen igazad van a könyvtár listázással! Nem is azzal van a gond! Igazából az volna h van egy adott könyvtár ami nem a DocumentRoot, hanem azon belül! értem én /www/vmi és a vmi be van egy másik index.php tehát az egy másik oldal lenne mint ami alapból csak a /www -n található!
Tehát az urlbe megadom simán az elérést így hogy www.serverem.hu/vmi akkor szépen betölti a vmi könyvtárba található php fájlt, viszont az error logba ezt a hibát írja "Directory index forbidden by options directive" pedig lefut és megnyitja az oldalt!

Tehát van a következő könyvtárstruktúra (a hozzászólásokból összeollózva):


/
/var/www/
/var/www/index.php
/var/www/oe_pics/
/www/oe_pics/proba/

Biztos, hogy így van ez?

Valamint van egy Apache szerver, mod_autoindex modul engedélyezve, de a documentroot alatt letiltva. Jól múködik.
Van egy .php file, amiben van... Mi is van benne pontosan, ami ezt a hibát okozza? Légy szíves, másold ide a relváns részletet!

"Azt hittem úgy működik ezaz "-Indexes FollowSymLinks" hogy ahol megvan az index fájl ott mindent engedélyez!"
Először javaslom elolvasni az Options Indexes leírását, hogy világos legyen ez az "engedélyezés", hogy nem egy file elérésének tiltását szolgálja.

"van egy adott könyvtár ami nem a DocumentRoot, hanem azon belül! értem én /www/vmi"
"DocumentRoot /var/www"
Akkor most valójában a /www, vagy a /var/www kellene hogy a documentroot legyen?

"az urlbe megadom [...] hogy www.serverem.hu/vmi akkor szépen betölti a vmi könyvtárba található php fájlt, viszont az error logba ezt a hibát írja "Directory index forbidden by options directive""
Egyszóval valószínűleg nem az /var/www/vmi/index.php elérésével és lefutásával van problémád, hanem a generált oldal tartalmával. És akkor visszatértünk oda, hogy mi is van a böngészőnek átadott tartalomban.

Nem sokszor szoktam szólni a fogalmazásért, de most (ismét) meg kell tennem. Nem szükséges mindenért felkiáltani, érdemes lenne központozni, hogy értelmet nyerjenek a mondatok, és nem utolsó sorban célszerűbb lenne egy kicsit összeszedettebben megfogalmazni a problémát.

A könyvtár struktúrát teljesen jól látod!

A szerver egy képnézegető volna! Két külön társaságnak! Az egyik társaságnak az oldala simán a /var/www -ben van! A másiknak meg egy másik mappába a /var/www-n belül ami legyen mondjuk vmi. Tehát a másik társaság egész honalapja és tartalma a /var/www/vmi -ben van. A képek amik adott könyvtárakba vannak, esetünkben a másik társaságnak a képei a /var/www/vmi/proba -ba! Én ezeket a képeket egy adott div-be illesztem a php scriptemmel, amiket js-el formázok értem én megjelenés, képkeret slidshow... és amikor kilistázom ezeket a képeket az adott div-be akkor írja ki ezt a hibát hogy "Directory index forbidden by options directive", viszont a képek betöltődnek és ezt nem igazán értem, ez volna a kérdés, h miért kapom én ezt az error üzenetet és mellette lefut még is a script!? a releváns kód részlet:

< ul id="slideshow" >

< ?php

$mappa="./proba";

$megnyit=@opendir($mappa);
while($fajl=@readdir($megnyit)){
if($fajl!="." && $fajl!="..")

echo '< li>';
echo '< h3>';
echo '< span >photos/proba.jpg';
echo '

';
echo '< a href="#">< /a >';
echo '< /li >';
}
? >

< /ul >

és elnézést szofisztikázatlan irományaim végett.

Ezt nem nagyon tudtam értelmezni. Eleve az if miatt két li tagnek nem lesz párja. A másik érdekesség, hogy mi a célja a $fajl nevű változónak, ha semmire sem használod fel - kivéve az előbb említett hiba elkövetésére.

"Esetleg az is problémát jelenthet hogy behívok egy js scriptet?"
Az attól függ, hogy mit csinál a script.

Megpróbálom összefoglalni: ezt a hibaüzenetet akkor kapod, ha olyan útvonalat adsz meg az URL-ben, amely a feloldások után olyan könyvtárra mutat, amelyben le van tiltva az automatikus indexgenerálás. Ilyen útvonal lehet az URL-ben az egyéb könyvtárak mellett a "." vagy ".." is.

Mivel számomra a fenti kódrészletből nem derült ki, hogy milyen URL kerül a HTML-be, vagy milyen milyen URL-eket kér le a javascript, nem tudom megmondani, hogy milyen kérések mennek a webszerver felé. Neked viszont könnyű, mivel ezzel együtt egy 403 hiba is keletkezik ilyenkor, amit az access logban látsz. A /www/oe_pics/proba könyvtárra mutató URL-t kér le a böngésző.

Nem volt tökéletes a forrásom elnézést! Így volna az!

< ? php

$mappa="./proba";
$megnyit=@opendir($mappa);
while($fajl=@readdir($megnyit)){
if($fajl!="." && $fajl!="..")

echo ' < li >';
echo '< h3 >< /h3 >';
echo '< p >< /p >';
echo '< a href="#" >< img src="'.$mappa.'/'.$fajl.'" alt="Proba" />< /a >';
echo '< / li >';
}
? >

Így már van használva a fájl változó! Igazából akkor hogyan tudnék egy adott indexet hozzá adni azaz engedélyezni, egy adott könyvtárra?!

Az acces logba meg csak ennyit kapok:

Directory index forbidden by options directive: /var/www/vmi/proba

"Nem volt tökéletes a forrásom elnézést! Így volna az!"
A li párosítások így sem jók. A problémád oka pedig ugyanaz, mint a li esetében, nevezetesen a rossz if. Zárójelezni kellene a blokkot.

"hogyan tudnék egy adott indexet hozzá adni azaz engedélyezni, egy adott könyvtárra?!"
Nem ez a baj. Nézd végig, mi történik, miután a readdir a "." nevű filenevet olvassa be. Megvan? "./proba/." és ez mire mappelődik? A "./proba" könyvtárra, amire le van tiltva az autoindexing. Javítsd a PHP ködot, és megoldódik a gond.

Ismét azt mondom, hogy írd be azt a hiányzó kapcsoszárójelpárt, és ha utána is jön a hiba, akkor menjünk tovább.

Persze ahhoz, hogy a Javascriptben hibát keressünk, kelleni fog a kód is. Ha ez a script valóban csak "formázást" végez (csak a megjelenítést befolyásolja), akkor ugye nem szól bele a HTTP-forgalomba, ennélfogva nem vezethet webszerver által jelzett hibához.