Usos del archivo .htaccess

En la raíz de tu cuenta de hospedaje (servidores Linux) encontrarás un archivo llamado .htaccess. Éste es un archivo de texto oculto que puede contener una serie de directivas para el servidor Apache y permite cambiar los parámetros de PHP cuando no tienes acceso al php.ini.

Cuando un cliente solicita un archivo al servidor, este busca desde el directorio raíz hasta el subdirectorio que contiene el archivo solicitado el archivo .htaccess y tiene en cuenta estas reglas antes de proceder con la petición, es decir, se aplican las normas especificadas al directorio en el que se encuentre .htaccess y los directorios por debajo de él.

Ejemplos de usos para .htaccess pueden ser restringir el acceso a determinados archivos, impedir el listado de los archivos de un directorio, redireccionar, personalizar las páginas de error o impedir el acceso a determinadas IPs o rangos de IP.

Impedir el listado del contenido de un directorio

Cuando se intenta acceder a un directorio, en ausencia de un archivo de índice, Apache muestra por defecto el contenido del directorio. Si queremos impedir al usuario ver el contenido de un directorio, bastaría con crear un archivo de índice, por ejemplo index.html, pero existe una solución más elegante mediante la directiva Options. Basta crear un archivo .htaccess que contenga la línea:

Options –Indexes

También podríamos utilizar la directiva DirectoryIndex, que especifica qué archivos actúan como índice por defecto, y que archivo mostrar en el caso de que estos no se encuentren. Por ejemplo la línea:

DirectoryIndex index.php index.html index.htm /prohibido.php

Esto indicaría al servidor que debe buscar los archivos index.php, index.html o index.htm, en ese orden, y en el caso de no encontrar ninguno de ellos, cargar el archivo prohibido.php.

Redireccionar el tráfico web

Si nos encontramos con la necesidad de enviar al usuario a una determinada dirección web cuando pida una cierta página, por ejemplo porque la hayamos movido, podemos utilizar la directiva Redirect de Apache.

Redirect /antiguo.php http://facilweb.net.net/otros/nuevo.php

Crear un mensaje de error personalizado

Este es uno de los usos más frecuentes para el archivo .htaccess. En ocasiones se pueden producir errores que deben ser notificados al usuario, por ejemplo en el caso de que se intente acceder a una página que no existe, bien por un fallo del usuario al introducir la url, o bien porque la página haya sido movida o eliminada. Estos mensajes suelen estar escritos en inglés, no ofrecen demasiada información al usuario, y rompen la estética general del sitio, por lo que es imprescindible personalizarlos.
Para lograrlo utilizamos la directiva ErrorDocument, del que tenemos un ejemplo a continuación:

ErrorDocument 403 “Acceso denegado
ErrorDocument 404 /404.php
ErrorDocument 500 http://facilweb.net/500.php

Los códigos de error 403, 404 y 500 son los más comunes, y se producen respectivamente cuando no se tiene permiso para acceder a una página, cuando no se encuentra un archivo y debido a un error interno del servidor.
La primera línea indica al servidor que muestre el mensaje ‘Acceso denegado’ siempre que se produzca el error 403. Las otras líneas ilustran la forma de indicar al servidor que muestre una determinada página cuando se produzca un error (se puede usar direcciones relativas o absolutas).

Redireccionar por el lenguaje del navegador

Con las siguentes líneas en el .htaccess se verificará por medio del navegador que idioma esta usando el visitante y se redireccionará a otra pagina:

RewriteEngine on
RewriteCond %{HTTP:Accept-Language} (es) [NC]
RewriteRule .* http://es.facilweb.net [L]

Denegar acceso por medio de IPs

Se puede negar o permitir el acceso de ciertos IPs al sitio web o a directorios específicos, con un código como el siguiente:

Order Deny,Allow
Deny from 1.1.1.1
Allow from 1.1.1.2

Nota: 1.1.1.1 y 1.1.1.2 equivalen a números IP cualesquiera

Hasta aquí hemos manipulado ciertos aspectos de la configuración de apache desde el .htaccess. En otro artículo haremos modificaciones a la configuración de php.