Evitar listado de directorio en Apache con .htaccess



Cuando un navegador está apuntando a un directorio de un sitio web que no tiene definido un fichero por defecto como index.htm, index.php, etc, los ficheros de ese directorio podrían ser listados como una página web.

Normalmente, la configuración por defecto de los servidores prohibe el ‘Directory Listing’. Por lo que, en lugar de mostrarnos todos los ficheros contenidos en esta carpeta nos aparecerá un mensaje de error 403: Forbidden ‘Acceso prohibido’.

Hay gente que para prevenir el listado de directorios, utilizan un archivo index.html vacío en cada carpeta en el servidor para así mostrar una ‘página en blanco’ y evitar que se liste el contenido del directorio.

Hay provedores de hosting, que permiten habilitar o deshabilitar esta característica desde su panel de administración, pero esta acción afecta a todo el sitio web. Por lo que si queremos listar los ficheros de algunos directorios y de otros no tenemos que buscar otra solución.

Lo más elegante y fácil es añadir una pequeña directiva en el .htaccess de cada directorio en que queramos evitar listar los ficheros o en el .htaccess principal pero indicando el directorio.

Desactivar el listado de directorio:

PHP:
  1. Options -Indexes

Activar el listado de directorio:

PHP:
  1. Options +Indexes

En caso de hayamos activado el Directory Listing y queramos mostrar una lista básica de los ficheros de cada directorio:

PHP:
  1. IndexOptions -FancyIndexing

Para mostrar una lista detallada con iconos, tamaño de ficheros, fecha de modificación, etc:

PHP:
  1. IndexOptions +FancyIndexing

Si por ejemplo quisiéramos listar todos los ficheros a excepción de los ficheros .mp3 y .wav incluiríamos en el fichero .htaccess:

PHP:
  1. IndexIgnore *.mp3 *.wav