lunes, 12 de octubre de 2009

Mod_rewrite convertir direcciones dinamicas en estaticas

Cuando programamos en un lenguaje de servidor como puede ser PHP o ASP.NET muchas veces pasamos algunos datos en la direccion de la pagina para obtenerlos por GET. asi una direccion dinamica seria algo asi:

http://www.juancito.com/index.php?sec=12


En primera instancia no habria nada de malo en tener una direccion de este tipo siempre que se realicen las validaciones correspondientes a esos datos en el lado del servidor.
Ahora el principal problema que surge es cuando queremos que nuestra pagina sea indexada por los robot de los buscadores, que muchas veces son incapaces de indexar esas direcciones sobre todo cuando los parametros que se pasan son muchos, es por eso que se puede usar una herramienta de apache para lograr direcciones mas atractivas por asi decirlo.
El Mod Rewrite es un módulo para el servidor Apache que sirve para reescribir las direcciones url. Este modulo se maneja por un conjunto de reglas que estan en un archivo .HTACCESS en el servidor, asi podemos cambiar la direccion anterior por una asi:
http://www.juancito.com/index-12.htm

Debido a que la traduccion de la url estatica se realiza al vuelo, se pueden utilizar ambas direcciones la estatica y la dinamica sin inconvenientes, aunque la estatica solo se utilizara si se la llama especificamente.

Mod Rewrite para un sola variable:


La sintaxis del mod rewrite es la siguiente:

rewriterule <secuencia a encontrar : pattern> <cadena para sustituir : substitution>

Secuencia : Pattern(patron) es una expresión regular la cual es aplicada (al vuelo) a la dirección URL actual. La dirección URL actual podría haber cambiado de antemano por la cadena de sustitución, es decir, toda la direccion URL pudiera no ser la misma.


Sintaxis de las expresiones regulares:

. (punto) cualquier caracter
[chars] no de los caracteres
[*chars] ninguno de los caracteres

Cuantificadores

? 0 o 1 del texto precedente
* 0 o N del texto precedente
+ 1 o N del texto precedente

Agrupamiento

(texto)

Inicio y fin de la cadena

^ Inicio de la cadena
$ Fin de la cadena

\char Escape, se utiliza para sustituir ( ) [ ] los cuales son marcadores

‘ last | L’ es el marcador de la ultima instrucción del MOD_REWRITE y detiene la ejecución.

Ejemplo:

En nuestro ejemplo queremos transformar esto http://www.juancito.com/index.php?sec=12 en esto http://www.juancito.com/index-12.htm, la directiva del archivo .htaccess seria:

Rewriterule ^index-(.*)\.html$ index.php?sec=$1

De esta manera el mod rewrite hara el proceso inverso al que hacemos nosotros cuando reciba la direccion /index-12.htm la transformara en /index.php?sec=12. Los valores de las variables a reempazar se representan con $a donde a es el numero contado de izquierda a derecha empezando por uno.
Asi para que funcione deberiamos subir el archivo .htaccess al servidor con el siguiente codigo:

RewriteEngine on
Rewriterule ^index-(.*)\.html$ index.php?sec=$1

Donde RewriteEngine on indica que usaremos el mod rewrite.
Si queremos transformar una direccion con mas de un parametro por ejemplo:
pagina.php?sec=perfil&usr=carla&id=265

la entrada del htaccess quedaria asi

Rewriterule ^perfil-([^/]+)-(.*)-(.*)\.html$ pagina.php?sec=$1&usr=$2&id=$3

y la url quedaria asi:
/perfil-carla-265.htm

bueno eso es todo, de mas esta decir aunque siempre hay algun despistado, que hay que modificar las direcciones de los enlaces de los archivos y poner las nuevas url, sino no va a funcionar, es decir en los links en donde aparecia pagina.php?sec=perfil&usr=carla&id=265 hay que poner /perfil-carla-265.htm.

No hay comentarios:

Publicar un comentario