Apache: Cómo Mostrar un Listado de Directorios

Para mostrar una lista de archivos y subdirectorios en un directorio en el servidor HTTP Apache, establezca Options +Indexes en ese directorio. La lista se genera cuando se otorgan permisos de acceso, no existe un archivo índice predeterminado y mod_autoindex está activado.

Condiciones bajo las cuales se muestra la lista

Cuando se solicita una URL de directorio en Apache 2.4, primero busca archivos especificados en DirectoryIndex. Por ejemplo, si index.html existe, ese archivo generalmente se muestra. Si el archivo no existe y Indexes está activado, mod_autoindex puede crear la lista. Para un comportamiento detallado, consulte la descripción de DirectoryIndex y la documentación de mod_autoindex.

Los ajustes de listado no otorgan permisos de acceso. Los directorios a los que se deniega el acceso o rutas que Apache no puede leer no mostrarán un listado. Además, puede ocurrir un 403 Prohibido por diversas razones, como autenticación o permisos del sistema de archivos, por lo que no debe habilitar el listado solo porque aparezca un 403.

Verifique antes de configurar

  • Prepare un directorio dedicado donde se puedan hacer públicos los listados y archivos. No coloque materiales que no deban ser públicos, como archivos de configuración, copias de seguridad o información personal.
  • Confirme el host virtual del sitio que se va a configurar y la ruta real del archivo. El ejemplo a continuación es para Ubuntu Apache 2.4 cuando la raíz de documentos del sitio es /var/www/html y el directorio público es downloads debajo de él. Reemplace con la ruta y URL reales del entorno.
  • Haga una copia de seguridad de la configuración existente y confirme que tiene permiso para administrar el sitio y recargar Apache. Si es un servidor de producción, primero verifique en un entorno de prueba.

Incluso si los archivos no aparecen en el listado, pueden ser accesibles si conoces la URL del archivo directamente. Ocultar nombres en el listado no es un sustituto de los permisos que bloquean el acceso a los archivos.

Aplicar a un directorio específico en el host virtual

En Ubuntu, la configuración activa del sitio suele estar en un archivo bajo /etc/apache2/sites-available/. Agrega el siguiente bloque a la configuración del host virtual del sitio o modifica la configuración de ruta existente. No agregues permisos públicos a las carpetas que ya tienen restricciones de acceso sin cuidado.

<Directory "/var/www/html/downloads">
    Options +Indexes
    Require all granted
</Directory>

Options +Indexes habilita el listado del contenido del directorio entre las opciones heredadas. Require all granted permite el acceso a esta ruta, así que úsala solo en directorios destinados a ser públicos. El alcance real de aplicación puede variar según otras secciones de configuración o ajustes de subdirectorios. Puedes consultar las reglas de herencia y combinación de opciones en la directiva Apache Options.

Después de guardar la configuración, verifica la sintaxis en Ubuntu. Si se muestra Syntax OK, recarga la configuración. Si ocurren errores, corrige la ruta y los errores tipográficos, y no recargues hasta que la verificación sea exitosa.

sudo apache2ctl configtest
sudo systemctl reload apache2

Las distribuciones distintas de Ubuntu pueden tener ubicaciones de archivos de configuración y nombres de servicios diferentes. Además, sigue las indicaciones de esa distribución para los comandos de verificación de sintaxis y recarga.

Verificando listados de directorios y alcance de acceso

  1. Coloca un archivo de prueba que pueda ser accesible públicamente en el directorio de destino y asegúrate de que el archivo de index especificado no esté allí.
  2. Abre la URL del directorio en tu navegador. En el ejemplo anterior, si la dirección del servidor es https://example.com, https://example.com/downloads/ sería la URL de ejemplo. Sustitúyela por el dominio real.
  3. Verifica si los archivos de prueba se muestran en la lista y abre los enlaces para asegurarte de que el alcance de acceso coincida con la configuración prevista. Dado que las configuraciones pueden ser heredadas por subdirectorios, revisa también el alcance de acceso público.

Si aparece una página en lugar de una lista, verifica si hay un archivo DirectoryIndex u otros manejadores/redirecciones. Si es un error 403, revisa las restricciones de acceso, los permisos del directorio y la configuración del índice en los registros de errores. También puedes comprobar si el módulo autoindex está activo usando apache2ctl -M. Si la ruta es incorrecta, puede ocurrir un error 404.

Al usar .htaccess

Si el administrador del servidor ha permitido cambios de Options en .htaccess para el directorio, también puedes agregar la siguiente línea a ese archivo. Si la AllowOverride de la configuración principal no permite esta opción, es posible que no funcione o cause un error en el servidor, así que confírmalo con el administrador.

Options +Indexes

Si tiene acceso a la configuración del servidor, Apache generalmente recomienda usar el archivo de configuración principal. Revise las condiciones aplicables en la guía .htaccess de Apache .

Para dejar de mostrar la lista

Configure Options -Indexes en la ruta indicada o restaure la configuración de antes de sus cambios, luego verifique la sintaxis y recargue Apache. Si lo añadió a .htaccess, elimine esa línea o, si está permitido, cámbiela a Options -Indexes. Dado que pueden existir configuraciones heredadas, revise nuevamente la URL del directorio después de realizar los cambios.

Simplemente desactivar la lista no bloquea el acceso a las URL de archivos ya conocidos. Para proteger los archivos en sí, aplique controles de acceso separados y verifique que los usuarios no autorizados realmente estén bloqueados.