Este artículo explica cómo crear reglas de reescritura para ocultar nombres de archivos en un directorio Web, ya sea para ocultar información o para crear URLs amigables, utilizando archivos .htaccess y mod_rewrite.

Los archivos .htaccess (hypertext access) son archivos de configuración distribuida que permiten definir diferentes directivas de configuración para cada directorio (junto con sus respectivos subdirectorios) sin necesidad de editar el archivo de configuración principal de Apache.

Entre sus usos más frecuentes, los archivos .htaccess permiten: autorizar y autenticar usuarios; especificar restricciones de seguridad para un directorio en particular; crear URLs amigables o semánticas (reescribir URLs largas y complejas, en otras más simples y fácil de recordar); bloquear usuarios por su dirección IP y/o dominio e ISP utilizando directivas allow/deny; permitir o denegar el listado de directorios Web; crear redirecciones estáticas; crear respuestas de error personalizadas; controlar la caché por medio de los navegadores y servidores proxy para reducir el uso del ancho de banda, la carga en el servidor, y los tiempos de acceso; evitar hotlink; y mucho más...

Con el tiempo publicaré artículos explicando cómo configurar archivos .htaccess para proveer todos estos usos, uno por uno. Hasta el momento, en el artículo Proteger con contraseña un directorio Web demostré cómo proteger con usuario y contraseña un directorio en particular, y en este artículo voy a demostrar como crear ocultar nombres de archivo o crear URLs amigables (creando una especie de "links simbólicos") utilizando el módulo de Apache mod_rewrite.

El módulo de Apache mod_rewrite utiliza un motor basado en reglas que utilizan expresiones regulares para reescribir las URLs requeridas al vuelo. Soporta un número ilimitado de reglas y condiciones para cada regla, para proveer un mecanismo de manipulación de URLs flexible y poderoso. Los cambios en las URLs pueden depender de varios tests en variables del servidor, variables de entorno, headers HTTP o estampillas de tiempo (timestamps).

mod_rewrite opera en las URLs completas en el contexto a nivel servidor (httpd.conf) o a nivel de directorio (.htaccess).

Manos a la obra

A modo de ejemplo, supongamos que el sitio "www.misitio.com" tiene su directorio raíz (DocumentRoot) en /var/www/misitio/ y deseamos acceder al archivo feeds_rss.xml mediante la URL "www.misitio.com/rss". Entonces, necesitamos una regla de reescritura que convierta "rss" en "feeds_rss.xml" dentro del directorio raíz.

Cambiar al directorio raíz del sitio Web en cuestión (en el ejemplo es /var/www/misitio/):

cd /var/www/misitio/

Una vez dentro del directorio, crear el archivo .htaccess:

nano .htaccess

Dentro del archivo, crear la siguiente regla de reescritura:

RewriteEngine on
RewriteRule rss feeds_rss.xml

La directiva RewriteEngine on habilita el motor de reescritura y la regla RewriteRule rss feeds_rss.xml indica que se cambie "rss" por "feeds_rss.xml".

De esta forma, cuando un usuario solicite la URL "www.misitio.com/rss" en realidad estará accediendo a "www.misitio.com/feeds_rss.xml".

Finalmente se deben configurar los permisos de acceso adecuados en el sistema de archivos del servidor, sólo Apache (usuario www-data en Debian y derivados o apache en Red Hat/Fedora/CentOS) debe tener acceso de lectura al archivo:

chown www-data:www-data .htaccess
chmod 440 .htaccess

Para que la regla de reescritura funcione, el servidor Apache debe tener el módulo mod_rewrite cargado. Es posible listar todos los módulos de Apache cargados utilizando la herramienta apache2ctl:

# apache2ctl -t -D DUMP_MODULES | grep rewrite
 rewrite_module (shared)
Syntax OK

Se observa que mod_rewrite está cargado. Si mod_rewrite no estuviera cargado, es necesario habilitarlo utilizando:

# a2enmod rewrite
Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Y luego reiniciar el servidor Apache mediante:

# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .

mod_rewrite es un módulo tan poderoso y flexible, y su sintaxis ha sido tan popularizada por Apache, que existe una versión para servidores Microsoft Internet Information Server (IIS) llamada ISAPI_Rewrite la cual posee una versión freeware para Windows 2003 y anteriores.

Para mayor información sobre los archivos .htaccess se recomienda leer la documentación oficial: Apache HTTP Server Tutorial: .htaccess files.

Para mayor información sobre mod_rewrite se recomienda leer la documentación oficial: Apache Module mod_rewrite.


Tal vez pueda interesarte


Compartí este artículo