nie zezwalaj na wyświetlanie katalogów za pomocą htaccess

105

Mam folder, na przykład: /public_html/Davood/ i zbyt wiele podfolder w folderze, na przykład: /public_html/Davood/Test1/, /public_html/Davood/Test1/Test/, /public_html/Davood/Test2/, ...

Chcę dodać plik htaccess do /public_html/Davood/odmowy DirectoryListing /Davoodi folderów podrzędnych, czy to możliwe?

DJafari
źródło
4
Nie rozumiem, dlaczego Options All -Indexesnie zadziałało, jak w kilku odpowiedziach!
Fr0zenFyr
1
@ Fr0zenFyr to zależy od konfiguracji serwera WWW, jeśli AllowOverride Alldziała
DJafari

Odpowiedzi:

126

Opcje -Indeksy powinny działać, aby zapobiec wyświetlaniu katalogów.

Jeśli używasz pliku .htaccess, upewnij się, że masz przynajmniej ustawienie "allowoverride options" w głównym pliku konfiguracyjnym Apache .

PPC-Coder
źródło
1
to nic nie zmienia
minhajul
70

Spróbuj dodać to do .htaccesspliku w tym katalogu.

Options -Indexes

To zawiera więcej informacji.

Bryan Drewery
źródło
Tak, myślałem - indeksuje wyłączone listy katalogów, zamiast tego blokuje całą zawartość z folderu ... Czy ktoś wie dlaczego?
Michael Fever
Wydaje mi się, że jest jakiś problem z konfiguracją serwera. Spróbuj włączyć rewritemoduł i ustawienie katalogu na AllowOverride All. Jeśli to wszystko już jest na miejscu, a to, co skomentowałeś, jest prawdą, to chyba po prostu mam zbyt dużo szczęścia, Options All -Indexesaby pracować nad każdym projektem na różnych serwerach.
Fr0zenFyr
35

Jeśli Options -Indexesnie działa tak, jak sugerował Bryan Drewery, możesz napisać metodę rekurencyjną do tworzenia pustych plików index.php.

Umieść to w swoim folderze podstawowym, który chcesz chronić, możesz nadać mu dowolną nazwę (polecam index.php)

<?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);
            }
        }
    }
}

?>

Te puste pliki index.php można łatwo usunąć lub nadpisać, dzięki czemu Twoje katalogi nie będą wyświetlane.

Cyklon
źródło
8
Chociaż pusty plik nie jest tak wielkim problemem, lepszym rozwiązaniem może być użycie dowiązań symbolicznych , w ten sposób oszczędza trochę miejsca i musiałby zmodyfikować tylko 1 plik, gdyby zdecydował się wyświetlić jakiś jednolity komunikat zamiast pustej strony.
daalbert
19

Aby wyświetlić błąd zabroniony, umieść następujące wiersze w pliku .htaccess:

Options -Indexes 

Jeśli chcemy zindeksować nasze pliki i pokazać im jakieś informacje, użyj:

IndexOptions -FancyIndexing

Jeśli chcemy, aby jakieś rozszerzenie się nie wyświetlało, to:

IndexIgnore *.zip *.css
Vivek
źródło
1
.httaccessczy .htaccess?
Naveen DA,
8

Opcje -Indeksy idealnie u mnie działają,

tutaj jest .htaccessplik:

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


   ....etc stuff

</IfModule>

Przed : wprowadź opis obrazu tutaj

Po :

wprowadź opis obrazu tutaj

Saurabh Mistry
źródło
5

Istnieją dwa sposoby:

  1. używając .htaccess: Options -Indexes

  2. utwórz pusty index.html

Cakka
źródło
3
Options -Indexes

Muszę spróbować utworzyć plik .htaccess w bieżącym katalogu, w którym chcę zablokować wyświetlanie indeksu katalogów. Ale przepraszam, nie wiem o rekurencyjnym kodzie .htaccess.

Spróbuj.

Jersey William
źródło
2

Zgodzić się, że

Options -Indexes

powinno działać, jeśli serwer główny jest skonfigurowany tak, aby zezwolić na nadpisywanie opcji, ale jeśli nie, spowoduje to ukrycie wszystkich plików na liście (więc każdy katalog będzie wyglądał na pusty):

IndexIgnore *
dashrb
źródło
2

Opcje -Indexes zwraca zabroniony błąd 403 dla chronionego katalogu. To samo zachowanie można osiągnąć, używając następującego przekierowania w htaccess:

RedirectMatch 403 ^/folder/?$ 

Spowoduje to zwrócenie niedozwolonego błędu, na przykład.com/folder/ .

Możesz także użyć mod-rewrite, aby zabronić żądania folderu.

RewriteEngine on

RewriteRule ^folder/?$ - [F]

Jeśli twój htaccess znajduje się w folderze, którego zamierzasz zabronić, zmień wzorzec RewriteRule z ^ folder /? $ Na ^ $ .

Amit Verma
źródło