Verzeichnisliste mit htaccess verweigern

102

Ich habe einen Ordner, zum Beispiel: /public_html/Davood/ und zu viele Unterordner in Ordnern, zum Beispiel: /public_html/Davood/Test1/, /public_html/Davood/Test1/Test/, /public_html/Davood/Test2/, ...

Ich möchte eine htaccess-Datei hinzufügen. /public_html/Davood/Um DirectoryListing in /Davoodund Unterordnern zu verweigern , ist dies möglich?

DJafari
quelle
3
Ich verstehe nicht, warum Options All -Indexeses nicht so funktioniert hat wie in wenigen Antworten!
Fr0zenFyr
1
@ Fr0zenFyr es hängt von der Webserver-Konfiguration ab, ob es AllowOverride Allfunktioniert
DJafari

Antworten:

123

Optionen -Indexe sollten funktionieren, um Verzeichnislisten zu verhindern.

Wenn Sie eine .htaccess-Datei verwenden, stellen Sie sicher, dass in Ihrer Apache- Hauptkonfigurationsdatei mindestens die Einstellung "Optionen zum Überschreiben zulassen" vorhanden ist .

PPC-Codierer
quelle
1
das ändert nichts
minhajul
68

Versuchen Sie, dies der .htaccessDatei in diesem Verzeichnis hinzuzufügen .

Options -Indexes

Dies hat mehr Informationen.

Bryan Drewery
quelle
Ja, ich dachte -Indexe deaktivierte Verzeichnislisten, stattdessen blockiert es alle Inhalte aus dem Ordner ... Weiß jemand warum?
Michael Fever
Ich kann mir nur vorstellen, dass es ein Problem mit der Serverkonfiguration gibt. Versuchen Sie, das rewriteModul und die Verzeichniseinstellung zu aktivieren AllowOverride All. Wenn all das bereits vorhanden ist und das, was Sie kommentiert haben, wahr ist, muss ich einfach zu glücklich sein, um Options All -Indexesin jedem Projekt auf verschiedenen Servern arbeiten zu können.
Fr0zenFyr
35

Wenn Options -Indexesdies nicht wie von Bryan Drewery vorgeschlagen funktioniert, können Sie eine rekursive Methode zum Erstellen leerer index.php-Dateien schreiben.

Legen Sie dies in Ihren Basisordner, den Sie schützen möchten. Sie können es beliebig benennen (ich würde index.php empfehlen).

<?php

recurse(".");

function recurse($path){
    foreach(scandir($path) as $o){
        if($o != "." && $o != ".."){
            $full = $path . "/" . $o;
            if(is_dir($full)){
                if(!file_exists($full . "/index.php")){
                    file_put_contents($full . "/index.php", "");
                }
                recurse($full);
            }
        }
    }
}

?>

Diese leeren index.php-Dateien können leicht gelöscht oder überschrieben werden und verhindern, dass Ihre Verzeichnisse aufgelistet werden.

Zyklon
quelle
8
Obwohl eine leere Datei keine große Sache ist, könnte eine bessere Lösung darin bestehen, symbolische Links zu verwenden . Auf diese Weise wird ein wenig Platz gespart, und er müsste nur eine Datei ändern, wenn er eine einheitliche Nachricht anzeigen möchte anstelle einer leeren Seite.
Daalbert
18

Um den verbotenen Fehler anzuzeigen, fügen Sie diese Zeilen in Ihre .htaccess-Datei ein:

Options -Indexes 

Wenn wir unsere Dateien indizieren und mit einigen Informationen anzeigen möchten, verwenden Sie:

IndexOptions -FancyIndexing

Wenn wir möchten, dass eine bestimmte Erweiterung nicht angezeigt wird, dann:

IndexIgnore *.zip *.css
Vivek
quelle
1
.httaccessoder .htaccess?
NaveenDA
8

Optionen -Indexe funktioniert perfekt für mich,

Hier ist die .htaccessDatei:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes <---- This Works for Me :)
    </IfModule>


   ....etc stuff

</IfModule>

Vor : Geben Sie hier die Bildbeschreibung ein

Nach dem :

Geben Sie hier die Bildbeschreibung ein

Saurabh Mistry
quelle
4

Es gibt zwei Möglichkeiten:

  1. mit .htaccess: Options -Indexes

  2. Erstellen Sie eine leere index.html

Cakka
quelle
3
Options -Indexes

Ich muss versuchen, eine .htaccess-Datei für das aktuelle Verzeichnis zu erstellen, für das ich keine Verzeichnisindexliste zulassen möchte. Aber leider weiß ich nichts über Rekursive im .htaccess-Code.

Versuch es.

Jersey William
quelle
2

Stimme dem zu

Options -Indexes

sollte funktionieren, wenn der Hauptserver so konfiguriert ist, dass Optionsüberschreibungen zulässig sind. Andernfalls werden alle Dateien aus der Liste ausgeblendet (sodass jedes Verzeichnis leer erscheint):

IndexIgnore *
dashrb
quelle
2

Optionen -Indexe gibt einen 403 verbotenen Fehler für ein geschütztes Verzeichnis zurück. Das gleiche Verhalten kann mit der folgenden Umleitung in htaccess erreicht werden:

RedirectMatch 403 ^/folder/?$ 

Dies gibt einen verbotenen Fehler zurück, zum Beispiel.com/folder/ .

Sie können auch mod-rewrite verwenden, um eine Anforderung eines Ordners zu verbieten.

RewriteEngine on

RewriteRule ^folder/?$ - [F]

Wenn Ihr .htaccess im Ordner, den Sie verbieten wollen, Muster der Änderung RewriteRule von ^ Ordner /? $ Bis ^ $ .

Amit Verma
quelle