Mod rewrite
En nuestros últimos proyectos en desarrollo, estamos utilizando la directiva unix mod_rewrite de Apache, esta directiva es un mecanismo muy flexible y potente de manipulación de URL . Mod_rewrite utiliza un motor de reescritura basado en un analizador sintáctico de expresiones regulares para reescribir peticiones de URls en el acto.
Toda la versatilidad y potencia de esta herramienta, se traduce en complejidad, por lo que nos centraremos en las ventajas e inconvenientes de su uso, ya que para conocimiento de su funcionamiento ya existe el manual oficial de Apache .
VENTAJAS
- Nos permite ofrecerle al usuario del sitio web URLs más accesibles y legibles dándole aspecto de página estática a una dinámica, sustituyendo las variables por textos relacionados con la sección en la que se encuentra. Por ejemplo:
Sin mod_rewrite nuestra URL quedaría de la siguiente forma:www.midominio.com/actions/noticias.php?var1=2&idioma=es&var2=trueMediante mod_rewrite podríamos modificarla a otra más sencilla:
www.midominio.com/Nuevas_tecnologias_web
Este ejemplo, se llevaría a cabo introduciendo en el .htaccess (archivo del que el mod_rewrite adquiere las reglas de reescritura) el siguiente código:
Options +FollowSymLinks
RewriteEngine On
Rewriterule Nuevas_tecnologias_web actions/noticias.php?var1=2&idioma=es&var2=true
*Más adelante se hará una pequeña introducción al funcionamiento de mod_rewrite. - Por otra parte, el hecho de transformar una URL dinámica a estática evita posibles conflictos a los buscadores, ya que al seguir los enlaces pueden entrar en ciclos infinitos, por esta razón las páginas con este tipo de URLs no son indexadas por los buscadores. Esta es una de las ventajas más importantes para optar por el uso de mod_rewrite puesto que, en gran parte, el éxito de un sitio web, depende del número de páginas indexadas y de su posición en los resultados de búsqueda de los buscadores (aspecto en el que Alia Multimedia está especializada) . Para ver cuantas páginas de tu sitio web están indexadas por Google se puede hacer poniendo como búsqueda en el servidor lo siguiente:
site:www.misitio.com inurl:www.misitio.com
Aunque el proceso de indexación no es inmediato, se requiere tiempo para ello.
ICONVENIENTES
- Uno de sus inconvenientes es que necesita un tiempo de aprendizaje para aprovechar todo el potencial que ofrece.
- El otro inconveniente que hemos encontrado es que es el largo proceso a la hora de poner enlaces en la página, puesto que los enlaces tienen que ir a las direcciones estáticas, a las que se mostrarán. Hay que tener especial atención a la hora de poner las mismas URLs que en el .htaccess.
INTRODUCCIÓN A MOD_REWRITE
Por último, introducir de forma muy básica al uso de mod_rewrite.
Las reglas de reescritura se deben introducir en el archivo .htaccess, que es un archivo de texto oculto que contiene una serie de directivas para el servidor Apache. Cuando un cliente solicita un archivo al servidor, este busca desde el directorio raíz hasta el subdirectorio que contiene el archivo solicitado, y tiene en cuenta las reglas del .htaccess antes de proceder con la petición.
Cada regla de reescritura se introduce con la siguiente directiva:
Rewriterule
Antes de las reglas hay que activar el motor de reescritura mediante la siguiente directiva:
Options +FollowSymLinks
RewriteEngine on
Un poco de sintaxis de expresiones regulares
Las cadenas de la directiva Rewriterule utilizan expresiones regulares a continuación se muestran algunas normas sintácticas:
- Texto:
. Un carácter
[chars] uno de los caracteres
[^chars] ninguno de los caracteres
text1|text2 text1 o text2 - Cuantificadores:
? 0 o 1 del texto precedente
* 0 o N del texto precedente (N > 0)
+ 1 o N del texto precedente (N > 1) - Agrupaciones:
(text) agrupaciones de texto. También sirve para hacer referencias a un grupo de la cadena_buscada desde la cadena_sustituta, en la que se puede referenciar al N-ésimo grupo mediante $N. Por ejemplo:Grupo1 Grupo2
\ /
Rewriterule noticias/(*.)/(*.) noticias.php?var=$1&idioma=$2
De este modo, noticias/2/es quedaraí así: noticias.php?var=2&idioma=es
- Limitadores:
^ carácter que indica inicio de cadena
$ carácter que indica fin de cadena - Escape:
\ escapa el carácter que le sigue
Para construir las reglas de las páginas dinámicas, es muy útil construir el archivo .htaccess de forma dinámica, de manera que se actualice cuando se introduzca un nuevo objeto en una sección añadiendo en .htaccess la regla de reescritura para este nuevo objeto. Por ejemplo:
function Actualizar_Htaccess(){
$htaccess = "Options +FollowSymLinks\n";
$htaccess .= "RewriteEngine On\n";
$htaccess .= "#SECCION NOTICIAS\n";
foreach($lista_noticias as $noticia){
$htaccess .= "Rewriterule noticias/".$ noticia['noticia_titulo']."$ noticias.php?
id =".$noticia['noticia_id']."\n";
}
$file_id = fopen(‘.htaccess’,'w+t'));
fwrite($file_id,$htaccess);
fclose($file_id);
}
*Usando esta función cada vez que se modificara la lista de noticias.
Alba Camacho
Departamento de desarrollo
Alia Multimedia
Publicado en General
October 29th, 2008 at 9:19 am
You write very well.