Versi�n 2.4 del Servidor HTTP Apache
Los ficheros .htaccess
facilitan una forma de realizar
cambios en la configuraci�n en contexto directorio.
M�dulos Relacionados | Directivas Relacionadas |
---|---|
.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.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.
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
.
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".
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
:
/www/htdocs/example
AddType text/example ".exm"
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
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.
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>
DocumentRoot
es /www/htdocs
.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.
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.
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
.
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.
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.