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.