<-
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.