Uso del módulo URL Rewrite

de Ruslan Yakushev

Acerca del módulo URL Rewrite

El módulo URL Rewrite 2.0 de Microsoft para IIS 7 y versiones superiores permite a los administradores de IIS crear potentes reglas personalizadas para asignar URL de solicitud a URL amigables que sean más fáciles de recordar para los usuarios y más fáciles de encontrar para los motores de búsqueda. Puede usar el módulo URL Rewrite para realizar tareas de manipulación de direcciones URL, algunas de las cuales incluyen:

  • Defina reglas eficaces para transformar direcciones URL complejas en direcciones web sencillas y coherentes.
  • Reemplace fácilmente las direcciones URL de la aplicación web para generar resultados descriptivos del usuario y del motor de búsqueda.
  • Reescriba las direcciones URL basadas en encabezados HTTP y variables de servidor IIS.
  • Realice redirecciones, envíe respuestas personalizadas o detenga las solicitudes HTTP en función de la lógica expresada en las reglas de reescritura.
  • Controlar el acceso al contenido del sitio web en función de los segmentos de dirección URL o de los metadatos de solicitud.

El módulo URL Rewrite está disponible tanto como una descarga que puede instalar en su propio servidor IIS y en la plataforma en la nube de Sitios web de Azure de Microsoft.

Características de URL Rewrite 2.0

El módulo Microsoft URL Rewrite 2.0 incluye las siguientes características clave:

  • Motor de reescritura de direcciones URL basadas en reglas. Las reglas de reescritura definen la lógica que se usa para analizar las direcciones URL de solicitud y asignarlas a las direcciones URL de rewite cuando la dirección URL de la solicitud coincide con una regla definida. Los administradores del servidor web y del sitio pueden usar conjuntos de reglas de reescritura para definir la lógica de reescritura de direcciones URL.
  • Coincidencia de patrones de expresión regular. Las reglas de reescritura pueden usar la sintaxis de expresión regular para la coincidencia de patrones tal como se define en ECMA-262.
  • Coincidencia de patrones comodín. Las reglas de reescritura pueden usar la sintaxis de caracteres comodín para la coincidencia de patrones.
  • Reglas de reescritura global y distribuida. URL Rewrite usa reglas globales para definir la lógica de reescritura de direcciones URL de todo el servidor. Estas reglas se definen dentro del archivo applicationHost.config y se superponen a las reglas configuradas en niveles inferiores de la jerarquía de configuración. El módulo también usa reglas distribuidas para definir la lógica de URL Rewrite específica de un ámbito de configuración determinado. Este tipo de regla se puede definir en cualquier nivel de configuración mediante archivos Web.config.
  • Acceso a variables de servidor y encabezados HTTP. Las variables de servidor y los encabezados HTTP proporcionan información adicional sobre las solicitudes HTTP actuales. Esta información se puede usar para configurar reglas de reescritura o para redactar la dirección URL de salida.
  • Varias acciones de regla. En lugar de volver a escribir una dirección URL, una regla puede realizar otras acciones, como emitir una redirección HTTP, anular la solicitud o enviar un código de estado personalizado a los clientes HTTP.
  • Compatibilidad con el modo kernel de IIS y el almacenamiento en caché de salida del modo de usuario. El almacenamiento en caché de salida de IIS proporciona importantes mejoras de rendimiento para las aplicaciones web. El módulo URL Rewrite es totalmente compatible con ambos tipos de almacenamiento en caché de salida. Esto significa que es posible almacenar en caché las respuestas de forma segura para las direcciones URL reescritas y, por tanto, aumentar el rendimiento de las aplicaciones web que dependen de la reescritura de direcciones URL.
  • Funciones de manipulación de cadenas. Las funciones de manipulación de cadenas integradas se pueden usar para convertir direcciones URL en minúsculas y para realizar la codificación y descodificación de direcciones URL.
  • Asignación de reescritura. Una asignación de reescritura es una colección arbitraria de pares nombre-valor. Puede usar una asignación de reescritura dentro de las reglas de reescritura para generar la dirección URL de sustitución. Las asignaciones de reescritura son especialmente útiles cuando se tiene un gran conjunto de reglas de reescritura, todas las cuales usan cadenas estáticas (es decir, no se usa ninguna coincidencia de patrones). En esos casos, en lugar de definir un gran conjunto de reglas de reescritura simples, puede colocar todas las asignaciones entre en la asignación de reescritura mediante la dirección URL de entrada como clave y la dirección URL de sustitución como valor. A continuación, puede tener una regla de reescritura que haga referencia al mapa de reescritura para buscar la dirección URL de sustitución en función de la dirección URL de entrada.
  • Compatibilidad con el seguimiento de solicitudes con errores. El seguimiento de solicitudes con error de IIS se puede usar para solucionar errores relacionados con la reescritura de direcciones URL.
  • Plantillas de regla. Una plantilla de regla es una extensión de la interfaz de usuario del módulo URL Rewrite que simplifica la creación de reglas de reescritura para una tarea concreta. El módulo incluye 3 plantillas de regla y también admite el acoplamiento en cualquier número de plantillas personalizadas.
  • Interfaz de usuario (UI) para probar patrones comodín y expresiones regulares. Se proporciona una interfaz de usuario para probar patrones de regla con el módulo. Con la interfaz de usuario, puede comprobar rápidamente los resultados de una expresión regular o un patrón comodín en una regla de reescritura. También puede usar la interfaz de usuario para solucionar problemas y depurar problemas relacionados con la coincidencia de patrones.
  • Interfaz de usuario para administrar reglas de reescritura y reescritura de mapas. Las reglas de reescritura y asignaciones de reescritura pueden ser agregadas, removidas y editadas usando el Módulo URL Rewrite desde el Administrador de IIS.
  • Interfaz de usuario para importar reglas de mod_rewrite. El módulo URL Rewrite incluye una interfaz de usuario para convertir reglas de reescritura del formato mod_rewrite al formato IIS.

Dónde obtener el módulo URL Rewrite

Para obtener más información y descargar el módulo, consulte la página principal de la extensión URL Rewrite.

Actualización desde la versión de Go Live

Si ya tiene instalada la versión Go Live del módulo URL Rewrite, el paquete de instalación lo actualizará a la versión 2.0 de URL Rewrite. Se conservarán todas las reglas de reescritura de los archivos ApplicationHost.config y Web.config.

Actualización de ASP.NET

El paquete del instalador del módulo URL Rewrite incluye una actualización de ASP.NET que corrige ASP.NET errores específicos del módulo URL Rewrite. En concreto, la actualización contiene correcciones para los siguientes errores:

  1. El operador ~ de ASP.NET control de servidor web se resuelve incorrectamente al usar URL Rewrite.
  2. La propiedad ASP.NET SiteMap.CurrentNode devuelve null cuando el sitemap contiene URL virtuales.

La actualización solo se aplica si el equipo donde se instala el módulo URL Rewrite tiene .NET Framework versión 3.5 SP1 o posterior. Si instala la versión necesaria de .NET Framework después de instalar el módulo URL Rewrite, puede aplicar la actualización de ASP.NET ejecutando el instalador del módulo URL Rewrite y seleccionando la opción Reparar en el cuadro de diálogo del instalador.

Para más detalles sobre estos y otros temas de ASP.NET relacionados con la reescritura de URL, consulte URL Rewrite para ASP.NET Web Forms.

Uso del módulo

Estos artículos cubren la funcionalidad del Módulo URL Rewrite y explican cómo utilizarlo para implementar escenarios comunes de reescritura de URL.

Aprendizaje de los conceptos básicos

Referencias e instrucciones

Tutorial en vídeo

Cambios desde la versión de Go Live

Las siguientes adiciones, cambios y correcciones de errores importantes se han realizado en el módulo de reescritura de direcciones URL desde la versión de Go Live:

  1. Se han agregado funciones de manipulación de cadenas UrlEncode y UrlDecode.
  2. Se proporcionó acceso a una dirección URL original sin procesar a través de la variable de servidor UNENCODED_URL. Esta variable de servidor ahora contiene la dirección URL codificada sin procesar exactamente como lo solicitó el explorador web.
  3. Se ha agregado la interfaz de usuario para configurar reglas de reescritura para el enrutamiento de solicitudes de aplicación (ARR).
  4. Se ha agregado compatibilidad con la actualización local desde la versión de Go Live del módulo de reescritura de direcciones URL.
  5. Se ha agregado funcionalidad para limpiar la caché interna para evitar un uso excesivo de memoria al almacenar en caché reglas de reescritura.
  6. Se ha corregido un error relacionado con la reescritura de direcciones URL que contienen caracteres no ASCII.
  7. Se ha corregido un error en el procesamiento de expresiones regulares que provocaba que los intervalos de caracteres se evaluara incorrectamente para los patrones que no distinguen mayúsculas de minúsculas.
  8. Se incluyó una actualización para el módulo FastCGI de IIS en el paquete del instalador.
  9. Se incluyó una actualización para System.Web.dll en el paquete del instalador.
  10. Se ha incluido una actualización de la función SetUri de IIS en el paquete del instalador.

Problemas conocidos

  1. mod_rewrite reglas que usan variables de servidor de REQUEST_URI pueden no funcionar correctamente cuando se importan mediante la URL Rewrite la característica Reglas de importación. Para corregir el uso de las reglas importadas, puede usar cualquier editor de texto para abrir el archivo Web.config que contiene esas reglas. Busque la sección <rewrite> y luego en esa sección reemplace todas las instancias de la cadena "{SCRIPT_NAME}" por la cadena "{URL}".
  2. No se puede usar la autenticación implícita con el módulo URL Rewrite.
  3. La autenticación de ASP.NET Forms utiliza una URL reescrita para la redirección. Por ejemplo, si la dirección URL solicitada es "/article.htm" y el módulo URL Rewrite vuelve a escribir la dirección URL en "/article.aspx", que está protegida por la autenticación de Forms, ASP.NET redirigirá a "/login.aspx?ReturnUrl=%2Farticle.aspx".
  4. El modo de detección automática en la autenticación de ASP.NET Forms usa una dirección URL reescrita para el redireccionamiento. Por ejemplo, si la dirección URL solicitada es "/article.htm" y el módulo URL Rewrite vuelve a escribir la dirección URL en "/article.aspx", que está protegida por la autenticación de Forms, ASP.NET redirigirá a "/article.aspx? AspxAutoDetectCookieSupport=1".
  5. El modo UseUri en la autenticación de ASP.NET Forms usa la dirección URL reescrita para el redireccionamiento. Por ejemplo, si la dirección URL solicitada es "/article.htm" y el módulo URL Rewrite vuelve a escribir la dirección URL en "/article.aspx", que está protegida por la autenticación de Forms, ASP.NET redirigirá a "/(S(vy2ebt45imfkmjjwboow3l55))/article.aspx".
  6. ASP.NET vuelve a escribir en la dirección URL original cuando se usa la autenticación basada en URI o el estado de sesión sin cookies. Por ejemplo, cuando se realiza una solicitud a "/(S(vy2ebt45imfkmjjwboow3l55))/article.htm" y el módulo de reescritura URL reescribe "/article.htm" a "/article.aspx", ASP.NET volverá a escribir la dirección URL en "/article.htm", lo que puede dar lugar a un error "404 - Archivo no encontrado".
  7. El módulo DefaultDocument de IIS puede redirigir a una dirección URL reescrita cuando el módulo URL Rewrite vuelve a escribir en una carpeta. Por ejemplo, si la dirección URL de sustitución de una regla de reescritura es "/folder1/folder2" y estas carpetas existen en el sistema de archivos y tienen configurado un documento predeterminado, el módulo DefaultDocument redirigirá los clientes web a "/folder1/folder2/", exponiendo así la dirección URL reescrita. Para evitar que esto suceda, use "/" al final de la dirección URL de sustitución al volver a escribir en una carpeta, por ejemplo, "/folder1/folder2/"