Rewriting en .NET I
Os voy a dejar a lo largo de varios posts el artículo sobre rewrite que publiqué en la revista MsCoder del mes de Febrero. Espero que os sea útil
¿Necesitas dar sentido al texto de tus urls mostrado en la barra de direcciones de los navegadores en las peticiones que se realizan a tus páginas? ¿Quizá buscas un mejor posicionamiento en Google, Yahoo y demás buscadores mediante la indexación de un gran número de enlaces apuntando a unas pocas páginas parametrizadas? ¿Simplemente buscas ocultar el nombre Y path de las mismas atendiendo a criterios de seguridad?
Entonces has llegado a Rewrite
1. Introducción
· ¿Qué es Rewriting?
El Rewriting a grandes rasgos es una técnica que consiste en reescribir urls que apuntan a páginas que no existen en tu servidor, capturando esta petición en algún punto de todo el proceso, redirigiendola a páginas físicas reales, las cuales son servidas al cliente, que en ningún momento advierte este proceso, siendo transparente para el mismo.
Los motivos para usarlo en nuestros desarrollos son diversos.
Hay un componente descriptivo, en cierto modo estético, que nos permitirá poder construir urls “amigables”, que en el mismo path conlleven una descripción de la página a la que apuntan, o incluso, una parte de su título o algún otro dato significativo de las mismas.
Enlace que verá el cliente:
http://www.midominio.com/ES/noticias/5/El_ciclon_Gordon_llega_a_Galicia.html
La página real a la que realmente accede el cliente:
http://www.midominio.com/noticias?IdNoticia=5
Otro componente importante es la seguridad. Sin ser una de las medidas más importantes en este aspecto, sin embargo nos ofrece la posibilidad de ocultar el path y nombre verdadero de nuestras páginas en el servidor, con lo que ocultamos en alguna medida, los primeros pasos de un intento de ataque mediante la obtención de cualquier tipo de información sobre nuestro servidor y páginas.
El tercero y de un tiempo a esta parte quizá el más importante, es la posibilidad que nos brinda el rewriting de subir el posicionamiento de nuestra Web en los buscadores. Más adelante profundizaré en este tema, quizá el punto central del mismo, pero como avance, podemos decir, que mediante estas técnicas, podemos hacer que los buscadores indexen una cantidad de páginas muy superior a las que físicamente tenemos. De hecho, las limitaciones al respecto son mínimas, pudiendo hacer crecer el número de páginas “simuladas” cuanto queramos, lo que también nos lleva a que, sin un control del mismo, podemos producir un efecto contrario al deseado ya que es un tema sabido que este tipo de simulaciones es uno de los motivos de penalización en los buscadores.
· De ASP a ASP.NET
Hasta el momento, querer reescribir las urls de tus páginas suponía utilizar Apache con PHP y mod_Rewrite o bien, en un servidor IIS con ASP, alguna herramienta de terceros en forma de filtro Isapi, como Isapi_rewrite. Si bien con .NET aún se puede recurrir a las herramientas mencionadas, ahora sí nos permite utilizar el motor de .NET para llegar al mismo resultado y, en mi opinión, un mayor control de lo que realmente está pasando en las entrañas de nuestro servidor.
Normalmente el proceso en el caso de usar un filtro externo sería el siguiente. Instalamos la dll que implementa el filtro (dos filtros disponibles son iisRewrite y mod_Rewrite)
En cualquiera de los casos anteriores, el funcionamiento y configuración de los filtros una vez instalados, será muy similar con ligeras variaciones.
El siguiente paso será configurar el IIS para que haga uso de esta dll. Esto se hará a través de las propiedades del Site donde queremos usar el rewrite (se realizará individualmente para cada Web site), añadiendo el filtro en la siguiente ventana de configuración a la que accederemos desde el menú contextual del site en sus propiedades:
Una vez añadida (pulsamos agregar y buscamos el path donde hemos instalado anteriormente la dll), accederemos a fichero de configuración, donde estableceremos las reglas de reescritura.
Como comenté antes, este paso es similar en todos los filtros, en cualquier caso, podéis encontrar ejemplos de los dos comentados en las siguientes direcciones: Mod_Rewirte y Mod_Rewirte.
Ambas librerías se configuran a través de un fichero .ini cuyo path es el mismo donde hayamos instalado la dll.
Las entradas de este fichero que más nos interesan serían:
Condiciones. A través de la cuales vamos a predeterminar cuando se aplicará el filtro o la redirección que tenemos a continuación.
El formato de la misma es: RewriteCond “Variable de servidor” “Expresión regular”. Pueden concatenarse varias condiciones mediante los operadores AND y OR.
La idea es simple, aplicaremos la regla que viene a continuación, si y sólo si se da esta condición *.
Reglas de redirección. Que determinarán la reescritura correcta de la página según la coincidencia con la expresión regular buscada. El formato sería: RewriteRule “Expresión regular entrada” espacio “Expresión regular salida”
Apliquemos un ejemplo
Queremos hacer una redirección hacia nuestra página de productos con el identificador del producto correspondiente, y como condición, sólo a modo de ejemplo, que la petición corresponda a una determinada IP, en este caso, el bucle local.
RewriteCond REMOTE_HOST 127.0.0.1
RewriteRule (ESesFRfrcatCAT)\S+(ProductoLocal/)([0-9]+)/+\w+\.\w+$ Productos.aspx?IdProducto=$3
Más adelante haremos una introducción a las expresiones regulares**, para el siguiente caso bastará saber que, en primer lugar, determinamos la condición de que la petición provenga del bucle local de la máquina donde esta el servidor (no tiene mucho sentido, ¿o sí?, pero en cualquier caso es sólo un ejemplo). En segundo lugar, estamos estableciendo la regla que hará, si seguís la expresión, que todas las peticiones que contengan ES o es o cualquiera de las primeras opciones, del primer paréntesis, más cualquier texto, más el literal “ProductoLocal/” + cualquier número + cualquier texto + “.” + más cualquier texto, se redirija a la página Productos.aspx, con el parámetro improducto que le daremos el valor $3 que se corresponde si os fijáis con la tercera agrupación del a expresión ([0-9]+).
*Podéis obtener, entre otras cosas, la lista completa de variables del servidor activando el seguimiento (trace) de vuestra aplicación, y posteriormente accediendo a la página virtual trace.axd o activando el seguimiento para las páginas individuales.
**Podéis bajaros algún editor para ir haciendo pruebas con las expresiones regulares. Mi preferido, es RegexDesigner.
Continúa...


0 comentarios:
Publicar un comentario en la entrada