denegar la lista de directorios con htaccess

103

Tengo una carpeta, por ejemplo: /public_html/Davood/ y demasiados sub carpeta en carpeta, por ejemplo: /public_html/Davood/Test1/, /public_html/Davood/Test1/Test/, /public_html/Davood/Test2/, ...

Quiero agregar un archivo htaccess en /public_html/Davood/Para denegar la lista de directorios /Davoody subcarpetas, ¿es posible?

DJafari
fuente
3
¡No veo por qué Options All -Indexesno funcionó como en pocas respuestas!
Viernes
1
@ Fr0zenFyr depende de la configuración del servidor web, si AllowOverride Allfunciona
DJafari

Respuestas:

124

Opciones -Los índices deberían funcionar para evitar listados de directorios.

Si está utilizando un archivo .htaccess, asegúrese de tener al menos la configuración "allowoverride options" en su archivo de configuración principal de apache .

Codificador PPC
fuente
1
esto no cambia nada
minhajul
69

Intente agregar esto al .htaccessarchivo en ese directorio.

Options -Indexes

Esto tiene más información.

Bryan Drewery
fuente
Sí, pensé: los índices de directorios desactivados, en cambio, bloquea todo el contenido de la carpeta ... ¿Alguien sabe por qué?
Michael Fever
Todo lo que puedo pensar es que hay algún problema con la configuración del servidor. Intente habilitar el rewritemódulo y la configuración del directorio en AllowOverride All. Si todo eso ya está en su lugar, y lo que comentaste es cierto, debo tener la suerte de poder Options All -Indexestrabajar en cada proyecto en diferentes servidores.
Fr0zenFyr
35

Si Options -Indexesno funciona como sugirió Bryan Drewery, puede escribir un método recursivo para crear archivos index.php en blanco.

Coloque esto dentro de su carpeta base que desea proteger, puede nombrarlo como quiera (recomendaría 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);
            }
        }
    }
}

?>

Estos archivos index.php en blanco se pueden eliminar o sobrescribir fácilmente, y evitarán que sus directorios sean enumerables.

Ciclón
fuente
8
Aunque un archivo vacío no es tan importante, una mejor solución podría ser usar enlaces simbólicos , de esa manera se ahorra un poco de espacio, y solo necesitaría modificar 1 archivo si eligiera mostrar algún tipo de mensaje uniforme en lugar de una página en blanco.
daalbert
18

Para mostrar el error Prohibido, incluya estas líneas en su archivo .htaccess:

Options -Indexes 

Si queremos indexar nuestros archivos y mostrarlos con alguna información, entonces usamos:

IndexOptions -FancyIndexing

Si queremos que no se muestre alguna extensión en particular, entonces:

IndexIgnore *.zip *.css
Vivek
fuente
1
.httaccesso .htaccess?
NaveenDA
8

Opciones: los índices funcionan perfectamente para mí,

aquí está el .htaccessarchivo:

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


   ....etc stuff

</IfModule>

Antes de : ingrese la descripción de la imagen aquí

Después :

ingrese la descripción de la imagen aquí

Mistry Saurabh
fuente
4

Hay dos maneras :

  1. usando .htaccess: Options -Indexes

  2. crear index.html en blanco

Cakka
fuente
3
Options -Indexes

Tengo que intentar crear el archivo .htaccess de ese directorio actual que quiero no permitir la lista de índices de directorios. Pero, lo siento, no sé sobre recursivo en el código .htaccess.

Intentalo.

Jersey William
fuente
2

De acuerdo en que

Options -Indexes

debería funcionar si el servidor principal está configurado para permitir anulaciones de opciones, pero si no, esto ocultará todos los archivos de la lista (por lo que cada directorio aparece vacío):

IndexIgnore *
Dashrb
fuente
2

Opciones: índices devuelve un error prohibido 403 para un directorio protegido. El mismo comportamiento se puede lograr usando el siguiente redireccionamiento en htaccess:

RedirectMatch 403 ^/folder/?$ 

Esto devolverá un error prohibido para example.com/folder/ .

También puede usar mod-rewrite para prohibir una solicitud de carpeta.

RewriteEngine on

RewriteRule ^folder/?$ - [F]

Si su .htaccess está en la carpeta que se va a prohibir, patrón de cambio de RewriteRule de ^ carpeta /? $ A ^ $ .

Amit Verma
fuente