negare l'elenco delle directory con htaccess


103

Ho una cartella, ad esempio: /public_html/Davood/ e troppi sottocartella nella cartella, ad esempio: /public_html/Davood/Test1/, /public_html/Davood/Test1/Test/, /public_html/Davood/Test2/, ...

Voglio aggiungere un file htaccess in /public_html/Davood/Per negare DirectoryListing /Davoode sottocartelle, è possibile?


3
Non vedo perché Options All -Indexesnon ha funzionato come in poche risposte!
Fr0zenFyr

1
@ Fr0zenFyr dipende dalla configurazione del server web, se AllowOverride Allfunziona
DJafari

Risposte:


124

Opzioni -Gli indici dovrebbero funzionare per impedire elenchi di directory.

Se stai usando un file .htaccess assicurati di avere almeno l'impostazione "allowoverride options" nel tuo file di configurazione apache principale .


1
questo non cambia nulla
minhajul

69

Prova ad aggiungerlo al .htaccessfile in quella directory.

Options -Indexes

Questo contiene più informazioni.


Sì, ho pensato -Index ha disabilitato gli elenchi di directory, invece blocca tutto il contenuto della cartella ... Qualcuno sa perché?
Michael Fever

Tutto quello che posso pensare è che c'è qualche problema con la configurazione del server. Prova ad abilitare il rewritemodulo e l'impostazione della directory su AllowOverride All. Se tutto ciò è già in atto e ciò che hai commentato è vero, devo essere troppo fortunato per Options All -Indexespoter lavorare in ogni progetto su server diversi.
Fr0zenFyr

35

Se Options -Indexesnon funziona come suggerito da Bryan Drewery, potresti scrivere un metodo ricorsivo per creare file index.php vuoti.

Inseriscilo nella cartella di base che desideri proteggere, puoi nominarlo come preferisci (consiglierei 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);
            }
        }
    }
}

?>

Questi file index.php vuoti possono essere facilmente cancellati o sovrascritti e manterranno le tue directory listabili.


8
Sebbene un file vuoto non sia un grosso problema, una soluzione migliore potrebbe essere quella di utilizzare collegamenti simbolici , in questo modo si risparmia un po 'di spazio e avrebbe bisogno di modificare solo 1 file se ha scelto di visualizzare una sorta di messaggio uniforme invece di una pagina vuota.
daalbert

18

Per mostrare l'errore Forbidden, includi queste righe nel tuo file .htaccess:

Options -Indexes 

Se vogliamo indicizzare i nostri file e mostrarli con alcune informazioni, allora usa:

IndexOptions -FancyIndexing

Se vogliamo che qualche estensione particolare non venga visualizzata, allora:

IndexIgnore *.zip *.css

1
.httaccesso .htaccess?
NaveenDA

8

Opzioni - Gli indici funzionano perfettamente per me,

ecco il .htaccessfile:

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


   ....etc stuff

</IfModule>

Prima : inserisci qui la descrizione dell'immagine

Dopo :

inserisci qui la descrizione dell'immagine


4

Ci sono due modi:

  1. utilizzando .htaccess: Options -Indexes

  2. crea index.html vuoto


3
Options -Indexes

Devo provare a creare il file .htaccess nella directory corrente che desidero disabilitare l'elenco dell'indice di directory. Ma, mi dispiace, non conosco il codice ricorsivo .htaccess.

Provalo.


2

D'accordo che

Options -Indexes

dovrebbe funzionare se il server principale è configurato per consentire l'override delle opzioni, ma in caso contrario, questo nasconderà tutti i file dall'elenco (quindi ogni directory appare vuota):

IndexIgnore *

2

Opzioni -Indici restituisce un errore 403 proibito per una directory protetta. Lo stesso comportamento può essere ottenuto utilizzando il seguente Redirect in htaccess:

RedirectMatch 403 ^/folder/?$ 

Ciò restituirà un errore vietato per example.com/folder/ .

Puoi anche usare mod-rewrite per vietare una richiesta di cartella.

RewriteEngine on

RewriteRule ^folder/?$ - [F]

Se il vostro .htaccess si trova nella cartella che si sta per vietare, modello cambiamento di RewriteRule dal ^ cartella /? $ A ^ $ .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.