<-
Apache > Servidor HTTP > Documentaci贸n > Versi贸n 2.4 > How-To / Tutoriales

Tutorial del Servidor Apache HTTP: Ficheros .htaccess

Idiomas disponibles: 聽en聽 | 聽es聽 | 聽fr聽 | 聽ja聽 | 聽ko聽 | 聽pt-br聽

Los ficheros .htaccess facilitan una forma de realizar cambios en la configuraci贸n en contexto directorio.

Support Apache!

Consulte tambi茅n

top

Ficheros .htaccess

Deber铆a evitar usar ficheros .htaccess completamente si tiene acceso al fichero de configuraci贸n principal de httpd. Usar ficheros .htaccess ralentiza su servidor Apache http. Cualquier directiva que pueda incluir en un fichero .htaccess estar谩 mejor configurada dentro de una secci贸n Directory, tendr谩 el mismo efecto y mejor rendimiento.
top

Qu茅 son/C贸mo usarlos

Los ficheros .htaccess (o "ficheros de configuraci贸n distribuida") facilitan una forma de realizar cambios en la configuraci贸n en contexto directorio. Un fichero, que contiene una o m谩s directivas, se coloca en un documento espec铆fico de un directorio, y estas directivas aplican a ese directorio y todos sus subdirectorios.

Nota:

Si quiere llamar a su fichero .htaccess de otra manera, puede cambiar el nombre del fichero usando la directiva AccessFileName. Por ejemplo, si usted prefiere llamar al fichero .config, entonces puede poner lo siguiente en el fichero de configuraci贸n de su servidor:

AccessFileName ".config"

Generalmente, los ficheros .htaccess usan la misma sint谩xis que los ficheros de la configuraci贸n principal. Lo que puede utilizar en estos ficheros lo determina la directiva AllowOverride. Esta directiva especifica, en categor铆as, qu茅 directivas tendr谩n efecto si se encuentran en un fichero .htaccess. Si se permite una directiva en un fichero .htaccess, la documentaci贸n para esa directiva contendr谩 una secci贸n Override, especificando qu茅 valor debe ir en AllowOverride para que se permita esa directiva.

Por ejemplo, si busca en la documentaci贸n la directiva AddDefaultCharset, encontrar谩 que se permite en ficheros .htaccess. (Vea la l铆nea de Contexto en el sumario de la directiva.) La l铆nea Override muestra FileInfo. De este modo, debe tener al menos AllowOverride FileInfo para que esta directiva se aplique en ficheros .htaccess.

Ejemplo:

Context: server config, virtual host, directory, .htaccess
Override: FileInfo

Si no est谩 seguro de cu谩ndo, una directiva en concreto, se puede usar en un fichero .htaccess, consulte la documentaci贸n para esa directiva, y compruebe la l铆nea Context buscando ".htaccess".

top

Cuando (no) usar ficheros .htaccess

Generalmente, solo deber铆a usar ficheros .htaccess cuando no tiene acceso al fichero principal de configuraci贸n del servidor. Hay, por ejemplo, una creencia err贸nea de que la autenticaci贸n de usuario deber铆a hacerse siempre dentro de ficheros .htaccess, y, m谩s recientemente, otra creencia err贸nea de que las directivas de mod_rewrite deben ir en ficheros .htaccess. Esto sencillamente no es el caso. Puede poner las configuraciones de autenticaci贸n de usuario en la configuraci贸n principal del servidor, y esto es de hecho, el m茅todo preferido de configurar Apache. Del mismo modo, las directivas mod_rewrite funcionan mejor, en muchos sentidos, en el fichero de configuraci贸n principal del servidor.

Los ficheros .htaccess deber铆an usarse cuando su proveedor de contenidos le permite hacer modificaciones de configuraci贸n en contexto directorio, pero usted no tiene acceso de root en el servidor. En el caso de que el administrador no est茅 dispuesto a hacer cambios frecuentes en la configuraci贸n, puede que sea necesario permitir a usuarios individuales realizar estos cambios de configuraci贸n en ficheros .htaccess por ellos mismos. Lo cual ocurre a menudo, por ejemplo, en casos donde los ISP est谩n albergando m煤ltiples sitios web de usuario en una sola m谩quina, y quieren que sus usuarios tengan la posibilidad de modificar sus configuraciones.

Aun as铆, generalmente, el uso de ficheros .htaccess deber铆a evitarse cuando sea posible. Cualquier configuraci贸n que considerar铆a poner en un fichero .htaccess, puede usarse con la misma efectividad en una secci贸n <Directory> en el fichero de configuraci贸n del servidor.

Hay dos razones para evitar el uso de ficheros .htaccess.

La primera es el rendimiento. Cuando AllowOverride est谩 configurado para permitir el uso de ficheros .htaccess, httpd buscar谩 ficheros .htaccess en cada directorio. As铆, permitiendo ficheros .htaccess provoca una p茅rdida de rendimiento, 隆incluso aunque no los use! Adem谩s, los ficheros .htaccess se cargan cada vez que se solicita un documento.

Adem谩s tenga en cuenta que httpd debe buscar ficheros .htaccess en todos los directorios de mayor jerarqu铆a, para poder terner la lista completa de directivas que debe aplicar. (Vea la secci贸n sobre C贸mo se aplican las directivas.) As铆, si se solicita un fichero de un directorio /www/htdocs/example, httpd debe buscar los siguientes ficheros:

/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess

De esta manera, por cada acceso a un fichero de ese directorio, hay 4 accesos adicionales al sistema de ficheros, incluso si ninguno de esos ficheros est谩 presente. (Tenga en cuenta que este caso solo se dar铆a si los ficheros .htaccess est谩n activados en /, que generalmente no es el caso.).

En el caso de las directivas RewriteRule, en el contexto de .htaccess estas expresiones regulares deben recompilarse con cada solicitud a ese directorio, cuando en el contexto de configuraci贸n del servidor solo se compilan una vez y se cachean. Adicionalmente, las reglas en s铆 mismas son m谩s complicadas, puesto que uno debe sortear las restricciones que vienen acompa帽adas del contexto directorio y mod_rewrite. Consulte la Gu铆a de Rewrite para un mayor detalle sobre este tema.

La segunda consideraci贸n es de seguridad. Estar谩 permitiendo que usuarios modifiquen la configuraci贸n del servidor, lo cual puede dar lugar a cambios sobre los que usted no tendr谩 ning煤n control. Medite profundamente si debe dar a sus usuarios ese privilegio. Adem谩s tenga en cuenta que dar a los usuarios menos privilegios de los que necesitan dar谩 lugar a m谩s peticiones de soporte. Aseg煤rese de que le indica a sus usuarios claramente el nivel de privilegios que les est谩 dando. Especificando exactamente c贸mo ha configurado AllowOverride, e inv铆teles a revisar la documentaci贸n relacionada, lo cual le ahorrar谩 bastantes confusiones m谩s adelante.

Tenga en cuenta que esto es equivalente por completo a poner un fichero .htaccess en un directorio /www/htdocs/example con una directiva, y poner la misma directiva en una secci贸n Directory <Directory "/www/htdocs/example"> en su configuraci贸n principal del servidor:

Fichero .htaccess en /www/htdocs/example:

Contenido de fichero .htaccess en /www/htdocs/example

AddType text/example ".exm"

Secci贸n de su fichero apache2.conf

<Directory "/www/htdocs/example">
    AddType text/example ".exm"
</Directory>

Aun as铆, poniendo 茅sta en el fichero de configuraci贸n dar谩 como resultado una menor p茅rdida de rendimiento, y como la configuraci贸n se carga una vez cuando el httpd arranca, en lugar de cada vez que se solicita un fichero.

El uso de ficheros .htaccess puede desactivarse por completo configurando la directiva AllowOverride a none:

AllowOverride None
top

How directives are applied

Las directivas de configuraci贸n que se encuentran en el fichero .htaccess se aplican al directorio en el que el fichero .htaccess se encuentra, y a todos sus subdirectorios. Sin embargo, es importante recordar que puede haber otros ficheros .htaccess en directorios previos. Las directivas se aplican en el orden en el que se encuentran. Por lo tanto, un fichero .htaccess puede sobrescribir directivas que se encuentran en ficheros .htaccess que se encuentran en directorios previos del 谩rbol de directorios. Y estos, en cambio, pueden haber sobrescrito directivas que se encontraban m谩s arriba, o en el fichero principal de configuraci贸n del servidor mismo.

Ejemplo:

En el directorio /www/htdocs/example1 tenemos un fichero .htaccess que contiene lo siguiente:

Options +ExecCGI

(Nota: debe terner "AllowOverride Options" configurado para permitir el uso de la directiva "Options" en ficheros .htaccess files.)

En el directorio /www/htdocs/example1/example2 tenemos un fichero .htaccess que contiene:

Options Includes

Por este segundo fichero .htaccess, en el directorio /www/htdocs/example1/example2, la ejecuci贸n de CGI execution no est谩 permitida, porque solo se ha definido Options Includes, que sobrescribe completamente una configuraci贸n previa que se pudiera haber definido.

Incorporando el .htaccess en los ficheros de configuraci贸n principal

Como se ha comentado en la documentaci贸n en las Secciones de Configuraci贸n, los ficheros .htaccess pueden sobrescribir las secciones <Directory> por el directorio correspondiente, pero se sobrescribir谩n por otros tipos de secciones de configuraci贸n de los ficheros de configuraci贸n principal. Este hecho se puede usar para forzar ciertas configuraciones, incluso en presencia de una configuraci贸n laxa de AllowOverride. Por ejemplo, para prevenir la ejecuci贸n de un script mientras se permite cualquier otra cosa en .htaccess puede usar:

<Directory "/www/htdocs">
    AllowOverride All
</Directory>

<Location "/">
    Options +IncludesNoExec -ExecCGI
</Location>
Este ejemplo asume que su DocumentRoot es /www/htdocs.
top

Ejemplo de Autenticaci贸n

Si salt贸 directamente a esta parte del documento para averiguar como hacer la autenticaci贸n, es important que tenga en cuenta una cosa. Hay una creencia err贸nea de que necesita usar ficheros .htaccess para configurar autenticaci贸n con contrase帽a. Este no es el caso. Colocar las directivas de autenticaci贸n en una secci贸n <Directory>, en su fichero de configuraci贸n principal, es el m茅todo recomendado para configurar esto, y los ficheros .htaccess deber铆an usarse solamente si no tiene acceso al fichero de configuraci贸n principal del servidor. Vea m谩s arriba una explicaci贸n de cuando deber铆a y cuando no deber铆a usar ficheros .htaccess.

Dicho esto, si todav铆a cree que debe usar el fichero .htaccess, podr谩 ver que una configuraci贸n como la que sigue podr铆a servirle.

Contenido del fichero .htaccess:

AuthType Basic
AuthName "Password Required"
AuthUserFile "/www/passwords/password.file"
AuthGroupFile "/www/passwords/group.file"
Require group admins

Tenga en cuenta que AllowOverride AuthConfig debe estar habilitado para que estas directivas tengan alg煤n efecto.

Por favor vea el tutorial de autenticaci贸n para una explicaci贸n m谩s completa de la autenticaci贸n y la autorizaci贸n.

top

Ejemplo de Server Side Includes

Otro uso com煤n de ficheros .htaccess es activar Server Side Includes para un directorio en particular. Esto puede hacerse con las siguientes directivas de configuraci贸n, colocadas en un fichero .htaccess y el directorio deseado:

Options +Includes
AddType text/html "shtml"
AddHandler server-parsed shtml

Tenga en cuenta que AllowOverride Options y AllowOverride FileInfo deben estar activadas para que estas directivas tengan efecto.

Por favor vea el tutorial de SSI para una explicaci贸n m谩s completa de server-side includes.

top

Reglas de Rewrite en ficheros .htaccess

Cuando use RewriteRule en ficheros .htaccess, tenga en cuenta que el contexto directorio cambia las cosas un poco. En concreto, las reglas son relativas al directorio actual, en lugar de serlo de la petici贸n de URI solicitada originalmente. Considere los siguientes ejemplos:

# En apache2.conf
RewriteRule "^/images/(.+)\.jpg" "/images/$1.png"

# En .htaccess en el directorio ra铆z
RewriteRule "^images/(.+)\.jpg" "images/$1.png"

# En .htaccess en images/
RewriteRule "^(.+)\.jpg" "$1.png"

En un .htaccess en cualquier directorio del DocumentRoot, la barra ("/") inicial se elimina del valor facilitado a RewriteRule, y en el subdirectorio images, se elimina /images/ tambi茅n de este valor. As铆, su expresi贸n regular necesita omitir tambi茅n esa parte.

Consulte la documentaci贸n de mod_rewrite para m谩s detalles al usar mod_rewrite.

top

Ejemplo de CGI

Finalmente, puede que quiera usar un fichero .htaccess para permitir la ejecuci贸n de programas CGI en un directorio en particular. Esto se puede implementar con la siguiente configuraci贸n:

Options +ExecCGI
AddHandler cgi-script "cgi" "pl"

Alternativamente, si quiere considerar como programas CGI todos los ficheros de un directorio concreto, esto se puede conseguir con la siguiente configuraci贸n:

Options +ExecCGI
SetHandler cgi-script

Tenga en cuenta que AllowOverride Options y AllowOverride FileInfo deben estar ambas activadas para que estas directivas tengan efecto.

Por favor vea el tutorial CGI para mayor detalle sobre programaci贸n y configuraci贸n de CGI.

top

Resoluci贸n de problemas

Cuando pone directivas en un fichero .htaccess y no obtiene el efecto deseado hay una serie de cosas que pueden haber ido mal.

El problema m谩s com煤n es que AllowOverride no est谩 configurada para que sus directivas puedan surtir efecto. Aseg煤rese de que no tiene AllowOverride None configurado para el directorio en cuesti贸n. Una buena forma de probar esto es poner "basura" en su fichero .htaccess y recargar la p谩gina. Si no se genera un error en el servidor, casi seguro que tiene configurado AllowOverride None.

Si, por otro lado, obtiene errores de servidor al intentar acceder a documentos, compruebe el log de errores de httpd. Seguramente le indiquen que la directiva en uso en su fichero .htaccess no est谩 permitida.

[Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex not allowed here

Esto indicar谩 que o bien ha usado una directiva que no se permite nunca en ficheros .htaccess, o que simplementa no tiene AllowOverride configurado a un nivel suficiente para la directiva que ha usado. Consulte la documentaci贸n para esa directiva en particular para determinar cual es el caso.

Alternativamente, puede que le indique que hay un error de sintaxis en el uso de la propia directiva.

[Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters

En este caso, el mensaje de error deber铆a ser espec铆fico para el error de sintaxis concreto que ha cometido.

Idiomas disponibles: 聽en聽 | 聽es聽 | 聽fr聽 | 聽ja聽 | 聽ko聽 | 聽pt-br聽

top

Comentarios

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.