URLs relativas y Rewrite en ASP.Net

Mejorando el algoritmo de rewriting en sacaCasa.com me he encontrado con un viejo conocido un tanto problemático pero que en esta ocasión he sido capaz de tumbar por K.O., las URLs relativas cuando colocas una URL falsa simulando un directorio.

Pongamos que tenemos la siguiente url virtual: www.misupermercado.com/frutas/fresas/ cuando en realidad se dirige a www.misupermercado.com/mostrador.aspx?cat=2&prod=1. La ruta real se encuentra en el directorio raíz, mientras que la mostrada en el explorador muestra hasta 2 subdirectorios, con el rewrite la redirección no supone problema, excepto si dentro de esa misma página existen llamadas a otros objetos con rutas relativas. Me explico:

Pongamos que por ejemplo hacemos una llamada a una imagen, para que el proyecto sea portable la ruta de la imagen será algo parecido a esto: “./imagenes/fresas.jpg“. Pues eso mismo y a causa del rewrite se convertirá en: “www.misupermercado.com/frutas/fresas/imagenes/fresas.jpg“; y claro, en esa ruta no existe tal imagen…

¿Cómo evitarlo?

3 pasos:

  1. Colocar el símbolo ~ como base de la ruta de la imagen. El símbolo ~ funciona en .Net como indicador del directorio raíz, por lo que “~/imagenes.fresas.jpg” siempre irá a la misma carpeta aunque lo escribamos dentro de un subdirectorio.

  2. Pon runat=”server”. Para que puedas colocar el símbolo ~ necesitas utilizar un objeto de servidor, por lo que deberás colocar la propiedad runat=”server”.
  3. Llama a la función rewrite utilizando una de sus sobrecargas y estableciendo a false el segundo parámetro. A pesar de lo anterior, lo mas probable es que .Net no te haga ni caso, esto es porque estás utilizando la llamada a la función Rewrite mas sencilla, debes establecer en una de sus posibles sobrecargas que no reescriba todas las rutas internas.

Ahora ya no tengo problemas para colocar rutas relativas con directorios simulados y puedo evitar tener que usar rutas absolutas, mucho mejor. Poco a poco voy domesticando el .Net, y cuanto más descubro mas me encanta, lo siento, pero PHP no tiene nada que yo eche de menos… aunque resultaba divertido debugar a base de echos.

One thought on “URLs relativas y Rewrite en ASP.Net”

  1. Excelente articulo, estaba en la misma problematica con las rutas relativas y absolutas. Gracias!

Comments are closed.