Los directorios que son publicados a través del servidor web Apache pueden ser configurados a través de la directiva <Directory> con la posibilidad de especificar una serie de opciones y otras directivas que se puedan aplicar al contexto de directorios, como los permisos de acceso a dicho directorio. Esta directiva debe incluirse en el archivo de configuración del servidor web Apache.
Directiva <Directory>
Las directivas <Directory> and </Directory> engloban un grupo de directivas que se aplicarán únicamente al directorio que se indique como atributo, a sus subdirectorios y a los archivos que se encuentren en todos ellos.
<Directory ruta-directorio>
Directivas-para-el-directorio
</Directory>
La ruta-directorio puede ser una ruta completa a un directorio, o una ruta en la que se usen caracteres comodín al estilo Unix (*, ?, []).
Un ejemplo de ruta completa puede ser:
<Directory /usr/local/httpd/htdocs>
# ... escribir las directivas aquí ...
</Directory>
En este otro ejemplo se usan caracteres comodín para hacer referencia a las carpetas public_html que se encuentren dentro de la carpeta personal de cualquier usuario:
<Directory /home/*/public_html>
# ... escribir las directivas aquí ...
</Directory>
Directiva Options
Dentro de la directiva <Directory> puedes usar la directiva Options para especificar una serie de posibles opciones al directorio especificado. Las posibles opciones son: All, ExecCGI, FollowSymLinks, Includes, IncludesNOEXEC, Indexes, MultiViews, SymLinksIfOwnerMatch.
El formato de uso es indicar la directiva Options seguida de todas las opciones deseadas separadas por espacios:
<Directory ruta-directorio>
Options opcion1 opcion2 opcion3
</Directory>
En el enlace anterior puedes ver la descripción de todas ellas, y se comentan a continuación las principales:
- All: incluye todas las opciones excepto MultiViews. Es la opción por defecto si no se indica ninguna opción.
- ExecCGI: Permite la ejecución de aplicaciones CGI en el directorio.
- FollowSymLinks: El servidor seguirá los enlaces simbólicos (no accesos directos de Windows) en el directorio.
- Indexes: Si no hay un archivo de índice (index.html, index.php, etc) en el directorio, se mostrará al usuario una lista de los archivos encontrados en el directorio.
Si hay varias directivas Directory con Options que pueden afectar a un mismo directorio, se usan las opciones de la directiva que es más específica al directorio, y las otras opciones son ignoradas.
En el siguiente ejemplo sólo la opción ExecCGI se establecerá para el directorio /web/docs/spec.
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options ExecCGI
</Directory>
Si todas las opciones del directorio están precedidas de por el símbolo + o -, las opciones de ese directorio se mezclarán con las de otro directorio que englobe al otro. Las opciones precedidas por + se añaden a las opciones actuales, y las precedidas por - se eliminan.
Así, en el siguiente ejemplo, el directorio /web/docs/spec tendrá activadas las opciones FollowSymLinks y ExecCGI.
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options +ExecCGI -Indexes
</Directory>
Directivas de accesos autorizados (Allow, Deny y Order)
La directiva Allow permite controlar los equipos que pueden acceder al directorio. El formato de uso es indicar Allow from seguido de una de las opciones que se comentan a continuación:
Si se indica Allow from all, se autoriza el acceso al directorio desde cualquier equipo:
Allow from all
Para establecer límites en el acceso se puede indicar una lista de direcciones IP o nombres de dominio que indicará los equipos que pueden acceder al directorio. En este formato, se puede indicar sólo la parte final de un nombre de dominio, la parte inicial de una dirección IP, o indicar la máscara de red para indicar un rango más amplio de equipos. A continuación se muestran varios ejemplos:
Allow from apache.org
Allow from .net example.edu
Allow from 10.1.2.3
Allow from 192.168.1.104 192.168.1.205
Allow from 10.1
Allow from 10 172.20 192.168.2
Allow from 10.1.0.0/255.255.0.0
Allow from 10.1.0.0/16
También se pueden utilizar variables de entorno como puedes ver en la documentación del servidor web Apache.
De manera similar se puede utilizar la directiva Deny para denegar el acceso a los equipos que se indiquen, siguiendo el mismo formato que el usado con la directiva Allow.
Las directivas Allow y Deny se pueden colocar en cualquier orden, y se pueden añadir varias líneas de cada tipo. Es la directiva Order la que establece el orden en el que se aplicarán. Por defecto, el orden es el siguiente:
Order Deny,Allow
Es decir, en primer lugar se consideran todas las directivas de denegación de acceso al directorio, y luego se tienen en cuentas las directivas de aceptación de permiso.
Por ejemplo, para permitir únicamente el acceso a los equipos del dominio apache.org:
Order Deny,Allow
Deny from all
Allow from apache.org
En cambio, si se desea dar permisos únicamente a los equipos del dominio apache.org excepto a los equipos del dominio foo.apache.org se debe usar la siguiente configuración, cambiando el orden a Allow,Deny:
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
Observa que en este último caso, si se hubiera indicado el order contrario (Order Deny,Allow) se daría acceso a todo el mundo excepto al dominio foo.apache.org.
Directiva AllowOverride
Cuando el servidor encuentra un archivo .htaccess en cualquiera de sus carpetas publicadas, las directivas que incluye dicho archivo son tenidas en cuenta por encima de las directivas establecidas en la configuración del servidor.
Si no se quiere que se tenga en cuenta este archivo, se debe utilizar la directiva AllowOverride con el parámetro None.
AllowOverride None
Por defecto, se permite el uso del archivo .htaccess, pero si quieres especificar literalmente que se considere dicho archivo dentro de una directiva Directory, debes indicar el parámetro All:
AllowOverride All
Además de los parámetros None y All, puedes usar el tipo de directivas que deseas permitir dentro de los archivos .htaccess. Puedes elegir entre las siguientes directivas: AuthConfig, FileInfo, Indexes, Limit, Options. En la documentación del servidor web Apache puedes encontrar infromación sobre su uso.
Directiva DirectoryIndex
La directiva DirectoryIndex permite indicar la lista de archivos que se buscarán cuando el cliente accede al servidor web sin indicar un nombre de archivo específico.
Por defecto, se buscará el archivo index.html.
Si quieres que también se busque el archivo index.php debes indicar lo siguiente:
<Directory /directorio/mi/web>
DirectoryIndex index.html index.php
</Directory>
Esta directiva se puede usar dentro de una directiva Directory o en la configuración global del servidor.