¿Qué son las Rewrite Rules?
Abril 14, 2008
Son un conjunto de reglas que se valen de expresiones regulares para poder reescribir solicitudes de direcciones URL “on the fly” y de forma transparente. Son parte del módulo de Apache mod_rewrite y soportan un número ilimitado de condiciones utilizando variables e inclusio los “headers” HTTP para cambios avanzados de las direcciones URL.
En palabras más claras nos permiten reescribir la dirección URL utilizando patrones fáciles de entender para los humanos y haciendolos fáciles de indexar y convertirlos a peticiones que nuestra programación pueda entender. Este módulo es comunmente utilizado para poder usar las denominadas “Clean URL’s” (URL limpias) para hacerlas más lógicas, un ejemplo sería cuando el usuario ve esta URL http://www.dominio.com/buscar/termino y el mod_rewrite se encarga de convertir esa URL en http://www.dominio.com/cgi-bin/buscar.cgi?term=termino.
De esta forma para el usuario es fácil recordar esa URL ya que mantiene una sintaxis más clara de entender. Esta no pretende ser una guía muy extensa del mod_rewrite, si quieres ampliar información puedes verla en la Wikipedia y el sitio de Apache, así como las directivas de configuración.
Algunos usos prácticos de las rewrite rules
- Permitir que las direcciones URL sean más amigables al usuario y los buscadores.
- Prevenir el “hot linking” o que usen tus imagenes en otros sitios.
- Esconder las direcciones web reales de tu servidor a los usuarios.
- Redirigir de forma transparente las peticiones web.
Es una herramienta muy potente, y nos da muchísimas posibilidades de juego a costa de un pequeño incremento en la carga de procesamiento en el servidor, por lo que no es aconsejable el uso excesivo de estas.
Para habilitarlas es aconsejable hacerlo desde la raíz del servidor web, creando un archivo .htaccess con las siguientes cabeceras
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
Abajo de estas líneas ya pueden empezar a detallarse las reglas que necesitemos configurar.
Desde hace algún tiempo he estado utilizando estas herramientas y me han ayudado a mejorar mi sitio web, son muy fáciles de usar si tienes un mínimo conocimiento de expresiones regulares y de las cabeceras del Apache. Así que me gustaría explicar algunos problemas que me encontre y como los hemos resuelto usando las rewrite rules:
Rewrite rules para el uso de “Clean URL’s”
RewriteRule ^user/(.*)$ /mt/mt-cp.cgi?username=$1 [L]
Esta regla lo que hace es buscar la palabra user seguida de una “/” desde el inicio de linea, es decir, el primer caracter despues del dominio, por ejemplo
http://www.dominio.com/user/edeleon
Si la encuentra reenvía la petición al servidor Apache de la siguiente forma
http://www.dominio.com/mt/mt-cp.cgi?username=edeleon
Y el servidor devuelve al usuario la página sin cambiar la URL en el navegador del usuario. Al usar el flag [L] le decimos al mod_rewrite que esa es la última regla evitando así que las siguientes reglas puedan cambiar el resultado de la petición.
Rewrite rules para el uso de “Clean URL’s” utilizando los “headers HTTP”
RewriteCond %{HTTP_REFERER} www [OR]
RewriteCond %{HTTP_REFERER} docs
RewriteCond %{REQUEST_URI} /user/(.*[^/])
RewriteRule ^user/(.*)$ /mt/mt-cp.cgi?username=$1 [L]
En esta ocasión utilizamos el RewriteCond para condicionar la regla de tal forma que preguntamos si la petición viene de un sitio que contenga www O docs en el dominio Y si la URL contiene /user/ seguida de cualquier caracter que utilice el patrón de RewriteRule para reescribir la petición. Ojo a la forma de utilizar [OR] para que el operador acepte una condicion u otra, y si no lo usamos usa el operador “and” por defecto.
Rewrite Rule para redirigir la petición a otra URL
RewriteRule ^categoria/(.*)$ /category/$1 [R]
Esta regla es útil cuando necesitamos redirigir al usuario a una nueva URL, al usar el “flag” [R] estamos diciendo al mod_rewrite que fuerze la redirección, cambiando la URL en la barra del navegador del usuario y pasando todo el texto despues de “/” como parámetro a la nueva URL.
otra forma de hacer un redirect de forma fácil sería
Redirect permanent /rss/comentarios.xml http://feeds.feedburner.com/my_feef_url
Este ejemplo es práctico si usamos por ejemplo a feedburner como proveedor de nuestros RSS, al usar la directiva Redirect hacemos una redirección del tipo permanente a la nueva URL. De manera que podemos seguir usando nuestras propias direcciones para que los usuarios se subscriban y de ser necesario cambiarlas en el futuro poder hacerlo de forma transparente para el usuario y asi evitar links rotos.
Otros usos de las rewrite rules podrían ser redirigir a los usuarios dependiendo del lenguaje del navegador a la versión específica de nuestro sitio web más adecuada. O verificar el tipo de navegador y si detectamos que es un móvil poder enviar al usuario a la versión móvil de nuestro sitio web. Las posibilidades son infitinas, y espero poder ir contando otras formas curiosas para usar las rewrite rules.






Ultimos comentarios