Está en la página 1de 5

Web: .

htaccess
Juan Mellado, 4 Octubre, 2005 - 16:31 Los ficheros .htaccess son archivos de texto que contienen directivas con las que se pueden modificar el funcionamiento del servidor web. Su mbito de aplicacin se restringe al directorio en el que se encuentran y a los subdirectorios que penden del l, razn por la que se denominan ficheros de configuracin distribuidos. Con ellos se pueden conseguir objetivos tan variados como pueden ser limitar el acceso a determinados usuarios, o retornar una pgina u otra dependiendo del navegador utilizado. Estos ficheros fueron definidos originalmente por el servidor web Apache, por lo que hoy en da pueden considerarse un estndar. Trabajar con ellos es fcil, basta con crearlos con un editor de texto y copiarlos al directorio deseado del servidor web. El mayor inconveniente que presentan es la nomenclatura de las directivas, que resulta un tanto crptica. En este artculo dar una serie de ejemplos sencillos demostrando la utilidad de este fichero. Los ejemplos utilizarn una nomenclatura genrica, como www.dominio.com o W.X.Y.Z, siendo necesario cambiar estos parmetros por los valores adecuados para poder utilizarlos en un sitio web. Antes de proceder a la creacin, modificacin o borrado de algn fichero .htaccess, debera leerse detenidamente la informacin al respecto proporcionada por su proveedor de servicio, y la documentacin que se encuentra en la web oficial httpd.apache.org.

Evitar que pueda listarse el contenido de los directorios Cuando se solicita a un servidor de pginas web una URL del tipo www.dominio.com/directorio, el servidor busca normalmente en el directorio solicitado un fichero que tenga por nombre index.html, index.php, index.cgi, o con cualquier otra extensin que tenga configurada. Si lo encuentra lo retorna, pero si no lo encuentra retorna una pgina HTML con una lista de enlaces a todos los archivos y carpetas del directorio, permitiendo navegar entre ellos. Este comportamiento no deseado puede evitarse aadiendo la siguiente lnea al fichero .htaccess: Options -Indexes Denegar el acceso desde ciertas direcciones IP Con .htaccess se puede impedir el acceso desde determinadas direcciones IP o dominios a nuestra web. Por ejemplo, aadiendo las siguientes lneas a .htaccess se denegara el acceso desde la IP W.X.Y.Z a nuestra web: order allow, deny

deny from W.X.Y.Z allow from all Tambin es posible denegar el acceso a un rango de direcciones IP, omitiendo los ltimos nmeros, o a un dominio concreto, escribindolo sin ms en el fichero: order allow,deny deny from W.X.Y. deny from www.dominio.com allow from all Limitar los tipos de ficheros que pueden subirse a un directorio Cuando se permite que los usuarios de una web suban ficheros a la misma, generalmente se quiere limitar el tipo de ficheros que pueden subir. Por ejemplo, si se quiere que slo se puedan subir ficheros con extensin .html, .htm o .shtml, y que no se pueda ejecutar cdigo PHP dentro de los mismos, bastara con poner un fichero .htaccess en el directorio donde los usuarios dejan sus ficheros con las siguientes lneas: php_value engine off AddType text/plain .htm .html .shtml Redirigir contenido Cuando se realiza una actualizacin o migracin de software, las nuevas versiones de los programas se suelen ubicar en un directorio distinto al del software actual. Se puede utilizar .htaccess para permitir que la web siga siendo accesible a travs de las mismas rutas con las que se venan haciendo hasta entonces, redirigiendo las pginas a su nueva ubicacin. Las siguientes lneas de ejemplo muestran como redirigir todas las solicitudes del contenido de un sitio a un directorio nuevo: Redirect / /nuevo/ El primer argumento representa la URL que se quiere redirigir, la raz del sitio en este ejemplo, y el segundo argumento el nuevo destino de las solicitudes, que debe ser una ruta vlida. Proteger directorios con un usuario y una clave Para proteger un directorio con un usuario y una clave, adems de .htaccess, se necesita crear un fichero de nombre .htpasswd. En este ltimo fichero se incluirn los nombres de los usuarios y las claves correspondientes a cada uno de ellos. El fichero .htpasswd es un fichero de texto, pero para crearlo se necesita la ayuda del programa htpasswd para codificar las claves de los usuarios. Esta aplicacin se ejecuta desde

lnea de comandos, admite como entrada una cadena de texto, y devuelve como salida la misma cadena de texto introducida pero codificada. Ejemplo de uso: htpasswd nb usuario1 clave1 usuario1:GnmqRZUopLvqg htpasswd nb usuario2 clave2 usuario2:k2BouslYiRIo. Los nombres de los usuarios y las claves codificadas deben colocarse en el fichero .htpasswd, en una lnea cada uno, separados por dos puntos, como en el ejemplo siguiente: usuario1:GnmqRZUopLvqg usuario2:k2BouslYiRIo. El fichero .htpasswd generado se debe copiar al servidor web, y dentro del fichero .htaccess del directorio que se quiere proteger, se deben poner las siguientes directivas: AuthUserFile /directorio/.htpasswd AuthName "Protegido" AuthType basic require valid-user La primera lnea indica la ruta completa donde se encuentra el fichero .htpasswd, la segunda asigna un nombre al recurso que se est protegiendo, la tercera indica el tipo de proteccin a aplicar, y la cuarta los usuarios que pueden acceder al directorio, en este caso todos los que figuran en el fichero de claves. Existen ms posibilidades que merecen la pena investigar, como limitar el acceso a slo algunos de los usuarios que aparecen en el fichero de claves, y no a todos. Por ejemplo, con las siguientes lneas se dara acceso slo a los usuarios "administrador" y "avanzado": require administrador avanzado Evitar el Hot Linking "Hot Linking" es el nombre con el que se conoce la prctica de poner enlaces a recursos desde una pgina web a otra. El uso ms comn es el de poner en una web un enlace a una imagen de otra web, evitando as tenerla almacenada localmente en el servidor donde se pone el enlace. El problema de esta prctica es que provoca un consumo del ancho de banda por parte del servidor en el que reside la imagen. Un ancho de banda que paga el propietario de la web en la que reside la imagen, no el que la enlaza.

Con .htaccess se puede evitar el Hot Linking, ya sea redirigiendo el enlace a otro recurso, como una imagen que contenga un mensaje de aviso, o provocando directamente un error de acceso denegado.

En el ejemplo que se expone a continuacin se muestran las directivas necesarias para capturar las peticiones de imgenes de tipo png y jpg, y generar un error de acceso denegado. RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?dominio.com/.*$ [NC] RewriteRule \.(png|jpg)$ - [F] Contenido dependiente del Navegador Con .htaccess tambin se puede forzar a que el servidor web despache una pgina u otra dependiendo del navegador (agente) que realiza la peticin. Para redirigir el contenido en funcin del navegador se puede utilizar el valor de "User-Agent" que aparece en la cabecera HTTP de las peticiones, y con el que normalmente se identifica el navegador. Por ejemplo, las siguientes lneas colocadas en un fichero .htaccess haran que cuando un agente solicitar la pgina index.html se le sirviese la pgina index.opera.html si se identifica como "Opera/*", la pgina index.mozilla.html si se identifica como "Mozilla/*" y la pgina index.html en cualquier otro caso. RewriteCond %{HTTP_USER_AGENT} ^Opera/* RewriteRule ^index\.html$ index.opera.html [L] RewriteCond %{HTTP_USER_AGENT} ^Mozilla/* RewriteRule ^index\.html$ index.mozilla.html [L] RewriteRule ^index\.html$ index.html [L] Los asteriscos en las expresiones regulares de las directivas casan con cualquier cadena de texto. Y en este caso en concreto se utilizan para redirigir el contenido dependiendo del nombre del agente sin tener en cuenta la versin, que suele indicarse a continuacin de la barra, como "Mozilla/3.0", "Mozilla/4.0", "Mozilla/5.0", Denegar el acceso a determinados robots No todos los robots que visitan una web lo hacen con el propsito de indexar el contenido, hay algunos que lo hacen, por ejemplo, para extraer direcciones de correo a las que enviar spam. Tambin ocurre que algunos robots estn mal programados, realizando demasiadas peticiones en muy poco tiempo, y ralentizando as el acceso del resto de visitantes de la web. Otro

problema aadido es que los robots suelen ser muy intrusivos, no limitndose a visitar las pginas web, sino adentrndose tambin en todos los directorios del servidor. Con el fin de controlar el comportamiento de los robots y restringir el contenido al que pueden acceder, se cre un protocolo de exclusin de robots. Este protocolo se basa en colocar en el directorio raz del sitio un fichero de texto, de nombre robots.txt, con una serie de directivas que los robots visitantes deberan seguir. Y aunque en la actualidad muchos robots se adhieren a este protocolo, el problema de robots.txt es que las directivas que contienen son interpretadas como recomendaciones, no como obligaciones, por lo que en la prctica no resulta de mucha utilidad. Con .htaccess se puede instruir al servidor web para que deniegue el acceso de un robot determinado a un directorio concreto. Por ejemplo, con las siguientes lneas se evitara el acceso de un robot determinado, en cualquiera de sus versiones, al contenido de un directorio con informacin privada: RewriteCond %{HTTP_USER_AGENT} ^robot.* RewriteRule ^/privado/.+ - [F] Como medida adicional se podra denegar adems el acceso a un rango determinado de direcciones IP desde las que procedan las visitas de los robots no deseados. Formato de Directivas Llegado a este punto, si se han seguido los ejemplos, es fcil percatarse que la sintaxis de las directivas de .htaccess es un tanto crptica. De forma muy general, se puede decir que las directivas se componen de tres partes. Una primera parte que indica el tipo de directiva, mediante el uso de una palabra reservada como Options o RewriteCond. Una segunda parte en la que se indican los parmetros adecuados a la directiva. Y una tercera parte, al final de cada lnea, en la que figuran modificadores o acciones adicionales. Los parmetros por lo general se indican en forma de expresin regular para hacer la directiva muy genrica. Las expresiones regulares son patrones de cadenas de textos que se definen utilizando smbolos como el de oclusin (^) para indicar el inicio, el del dlar ($) para sealar el final, el cierre de interrogacin (?) para un carcter opcional, el asterisco (*) para varios caracteres opcionales, y as sucesivamente. Los valores que aparecen entre corchetes al final de cada lnea son modificadores o acciones. Por ejemplo, para RewriteCond se puede utilizar [NC] para indicar que en la directiva no debe distinguirse entre maysculas y minsculas (no case), u [OR] para indicar que la expresin actual debe interpretase como una alternativa a la anterior en vez de tomarse como un [AND], que es el valor por defecto. Por su parte, RewriteRule admite otros modificadores propios, como [F] para forzar un acceso denegado (forbidden), o [L] para indicar que es la ltima regla que dbe apliecarse (last rule).