2011-05-09 11 views
57

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/, ...negar el listado de directorios con .htaccess

Quiero añadir un archivo .htaccess en /public_html/Davood/ Para denegar DirectoryListing en /Davood y carpetas secundarias, ¿es posible?

+0

no veo por qué 'todo Opciones de -Indexes' didn ¡No funcionan como en pocas respuestas! – Fr0zenFyr

+0

@ Fr0zenFyr depende de la configuración del servidor web, si 'AllowOverride All', funciona –

Respuesta

65

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 principal apache config file.

+0

esto no cambia nada – minhajul

30

Intente agregar esto al archivo .htaccess en ese directorio.

This tiene más información.

+0

Estoy probado, pero desafortunadamente no funciona. –

+0

Sí, pensé: indexa listas de directorio deshabilitadas, en cambio bloquea todo el contenido de la carpeta ... ¿Alguien sabe por qué? –

+0

Todo lo que puedo pensar es que hay algún problema con la configuración del servidor. Intente habilitar el módulo 'rewrite', y la configuración del directorio a' AllowOverride All'. Si todo lo que ya está en su lugar, y lo que ha comentado es cierto, debo ser muy afortunado de tener 'Options All -Indexes' para trabajar en cada proyecto en diferentes servidores. – Fr0zenFyr

31

Si Options -Indexes no funciona como sugirió Bryan Drewery, podría escribir un método recursivo para crear archivos index.php en blanco.

Lugar esto dentro de la carpeta de la base que desea proteger, puede que el nombre sea cual sea (yo 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 con facilidad o sobrescritos, y mantendrán sus directorios imposibles de listar.

+7

Aunque un archivo vacío no es tan importante, una mejor solución podría ser utilizar [enlaces simbólicos] (http://php.net/manual/en/function.symlink.php), que De esta forma ahorrará un poco de espacio, y solo necesitaría modificar 1 archivo si elige mostrar algún tipo de mensaje uniforme en lugar de una página en blanco. – daalbert

+0

@daalbert "de esa manera ahorra un poco de espacio" - ¿Eres un administrador de sistemas? sysadmin logic: acabas de guardar 2Kb * 1000 carpetas = 2Mb; ¿Te quejas de unos pocos Mb cuando tienes al menos 50 Gb gratis? Sus soluciones son malas pero tu respuesta es incluso más tonta ... – HellBaby

+0

¡No veo por qué 'Options All -Indexes' no funcionó! – Fr0zenFyr

8

Para mostrar errores Prohibida continuación incluyen estas líneas en su archivo .htaccess:

Options -Indexes 

Si queremos índice nuestros archivos y que muestra con un poco de información, a continuación, utilizar:

IndexOptions -FancyIndexing 

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

IndexIgnore *.zip *.css 
+0

'.httaccess' or' .htaccess'? – NaveenDA

1
Options -Indexes 

Tengo que intentar crear el archivo .htaccess en el directorio actual que quiero deshabilitar el listado del índice del directorio. Pero, lo siento, no sé de recursivo en el código .htaccess.

Pruébalo.

0

Convienen en que

Options -Indexes 

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

IndexIgnore * 
0

Opciones -Indexes devuelve un error prohibido 403 para un directorio protegido.El mismo comportamiento se puede achived utilizando el siguiente Remitir dentro .htaccess:

RedirectMatch 403 ^/folder/?$ 

Esto devolverá un error de 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, cambiar el patrón de RewriteRule^de carpeta /? $ a ^$.

0

Hay dos maneras:

  1. utilizando .htaccess: Options -Indexes

  2. crear index.html en blanco