Establecimiento de encabezados de solicitud HTTP y variables de servidor IIS

de Ruslan Yakushev

Esta sección de la documentación se aplica a la versión 2.0 del módulo de reescritura url para IIS 7.

Este tutorial le guiará a través de cómo usar url Rewrite Module v 2.0 para establecer encabezados de solicitud HTTP y variables de servidor IIS.

Prerrequisitos

Este tutorial requiere los siguientes requisitos previos:

  1. IIS 7.0 o posterior con ASP.NET servicio de rol habilitado
  2. Url Rewrite Module 2.0 instalado

Configuración de un escenario de tutorial

Para demostrar cómo usar url Rewrite Module 2.0 para establecer encabezados HTTP y variables de servidor IIS, implementaremos un escenario en el que el encabezado http cookie en la solicitud se establece en función de la dirección URL solicitada. Por ejemplo, supongamos que tiene una aplicación web que sirve páginas web localizadas. La aplicación web determina el idioma de la respuesta en función de la cookie HTTP de la solicitud. El problema con este enfoque es que los motores de búsqueda no indexarán el contenido localizado de esta aplicación, ya que los rastreadores del motor de búsqueda no usan cookies HTTP y, por lo tanto, solo la aplicación web atenderá el contenido en el idioma predeterminado. Para solucionar este problema, decide agregar información sobre el idioma como parte de la dirección URL, por ejemplo, http://www.contoso.com/default.aspx, y luego usar el Módulo de Reescritura de URL 2.0 para establecer la cookie que la aplicación web espera, con el fin de determinar el idioma de la respuesta. Además, quiere establecer otra variable de servidor denominada ORIGINAL_URI que contendrá la cadena de URI solicitada originalmente.

Para configurar el escenario de tutorial, copie el código ASP.NET siguiente y colóquelo en la %SystemDrive%\inetpub\wwwroot\ carpeta en un archivo denominado language.aspx:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>URL Rewrite Module v2 Test - Setting Server Variables</title>
</head>
<body>
 <h1>Setting HTTP request header and a server variable with URL Rewrite Module v2</h1>
 <p>The value of the Language cookie is <strong><%=( Request.Cookies["Language"] != null ) ? Request.Cookies["Language"].Value : "Cookie not set" %></strong></p>
 <p>The originally requested URI is <strong><%= HttpUtility.HtmlEncode( Request.ServerVariables["ORIGINAL_URI"] ) %></strong></p>
</body>
</html>

Después de copiar este archivo, vaya a http://localhost/language.aspx y compruebe que la página se ha representado correctamente en un explorador.

Creación de una regla de reescritura

Creará una regla de reescritura que reescribirá las direcciones URL mediante el siguiente formato:

http://localhost/<language>/anyfile.aspx
se volverá a escribir como:
http://localhost/anyfile.aspx

La regla de reescritura también establecerá dos variables de servidor IIS:

  • HTTP_COOKIE
  • ORIGINAL_URI

Creará una regla de reescritura mediante la interfaz de usuario de reescritura de url en el Administrador de IIS.

Abra el Administrador de IIS, elija el "Sitio web predeterminado" en la vista de árbol del lado izquierdo y, a continuación, abra la característica "Url Rewrite":

Captura de pantalla de la pantalla inicio del sitio web predeterminado de I S Manager con un enfoque en la opción U R L Rewrite.

Permitir que se cambien las variables de servidor

De forma predeterminada, las reglas de reescritura distribuidas (es decir, las reglas definidas para sitios o aplicaciones web específicos) no pueden establecer ni cambiar ninguna variable de servidor IIS, a menos que la variable de servidor se agregue a la lista "Permitido". Para este tutorial, deberá agregar las dos variables de servidor siguientes a la lista "Variables de servidor permitidas":

  • HTTP_COOKIE
  • ORIGINAL_URI

Nota:

La lista "Variables de servidor permitidas" no es aplicable a las reglas globales, que se definen en un nivel de servidor. No es necesario agregar una variable de servidor a la lista "Permitido" si esa variable de servidor se establece mediante una regla de reescritura global.

Seleccione la opción "Ver variables de servidor..." acción desde el panel "Acciones":

Captura de pantalla de la pantalla reescritura de U R L con un foco en la opción Ver variables del servidor en el panel Acciones.

Use la acción "Agregar..." para agregar las variables de servidor HTTP_COOKIE y ORIGINAL_URI a la lista "Variables de servidor permitidas":

Captura de pantalla del cuadro de diálogo Agregar variable de servidor con el subrayado ORIGINAL U R I escrito como nombre de variable de servidor.

Una vez actualizada la lista "Variables de servidor permitidas", haga clic en la acción "Volver a reglas" para volver a la vista de lista de reglas.

Definición del mapa de reescritura

El siguiente paso consiste en definir un mapa de reescritura que se usará para asignar la parte de la URL, que representa el idioma, al identificador de configuración regional que guardará la regla de reescritura en el encabezado HTTP de cookie.

Seleccione la opción "Ver mapas de reescritura..." acción en el panel "Acciones":

Captura de pantalla de la pantalla reescritura de U R L con un enfoque en la opción Ver mapas de reescritura en el panel Acciones.

Haga clic en "Agregar mapa de reescritura..." y especifique el nombre del mapa como "Idiomas":

Captura de pantalla del cuadro de diálogo Agregar mapa de reescritura con idiomas especificados como nombre de mapa de reescritura.

Este mapa definirá las asignaciones entre la parte de la URL que representa un idioma y el código de localización que se usará al establecer la cookie de solicitud HTTP. Haga clic en "Editar configuración del mapa..." para especificar el valor predeterminado a usar cuando no se puede encontrar ningún mapeo. Escriba "en_US" como valor predeterminado:

Captura de pantalla del cuadro de diálogo Editar mapa de reescritura que muestra E N subrayado U S como valor predeterminado que se va a usar cuando la clave no se encuentra en el mapa.

Cierre el cuadro de diálogo y, a continuación, use la acción "Agregar entrada de asignación..." para agregar las siguientes asignaciones:

Valor original: Nuevo valor:
fr-fr fr_FR
de-de de_DE
ru-ru ru_RU

Definición de la regla de reescritura

Por último, creará una regla de reescritura que establece las variables de servidor mediante el mapa de reescritura definido anteriormente.

Para abrir el cuadro de diálogo "Editar regla", haga clic en la acción "Agregar reglas..." en la vista principal de funcionalidades y seleccione la "Regla en blanco" en la categoría "Reglas de entrada". Escriba la configuración de la regla como se indica a continuación:

Captura de pantalla de la ventana de edición de regla de entrada que muestra las secciones Nombre, Coincidencia de U R L, Condiciones, Variables de Servidor y Acciones.

  • Nombre de regla: "establecer variables de servidor"

  • Dirección URL solicitada: "Coincide con el patrón"

  • Uso de: "Expresiones regulares"

  • Patrón: "^([a-z]{2}-[a-z]{2})/(.*)"

  • Condiciones:

    • Entrada: "{Languages:{R:1}}"
    • Tipo: "Coincide con los patrones"
    • Patrón: "(.+)"
  • Acción:

    • Tipo: "Reescritura"
    • Reescribir URL: "{R:2}"

El patrón de la regla coincide con cualquier ruta de acceso url que contenga el segmento de idioma (por ejemplo, http://www.contoso.com/de-de/default.aspx). También captura el segmento de idioma y la ruta URL en las referencias posteriores de la regla, de modo que se puedan volver a usar más adelante en la regla. La condición de regla usa el segmento de idioma capturado anteriormente como una clave de búsqueda que se pasa al mapa de reescritura "Idiomas". El resultado de la búsqueda en el mapa se almacena en la referencia inversa condicionada. La acción de regla vuelve a escribir la dirección URL para que no contenga el segmento de idioma.

Expanda "Variables de servidor..." y especifique los valores que se usarán para establecer las variables de servidor:

Captura de pantalla del cuadro de diálogo Variables del servidor con H T T P subrayado COOKIE y ORIGINAL subrayado U R L especificados en el campo Nombre.

  • Nombre: HTTP_COOKIE, Valor: Language={C:1}
  • Nombre: URI_ORIGINAL, Valor: http://{HTTP_HOST}{REQUEST_URI}

La cookie HTTP se establece mediante la referencia inversa de condición, que contiene el identificador de configuración regional obtenido de la asignación de reescritura de "Idiomas". El valor de la variable de servidor ORIGINAL_URI se compila mediante {HTTP_HOST} y las variables de servidor {REQUEST_URI}.

Haga clic en "Aceptar" para cerrar el cuadro de diálogo y, a continuación, haga clic en "Aplicar" en el panel "Acciones" del lado derecho para guardar la regla.

Prueba de la regla

Para probar que la regla establece correctamente la cookie y una variable de servidor, abra un explorador web y solicite la siguiente dirección URL:

http://localhost/fr-fr/language.aspx

Captura de pantalla de la página web de prueba del módulo U R L Rewrite v 2 con foco en la barra de U R L, la cookie de lenguaje se establece en F R de subrayado F R.

Debería ver que la regla de reescritura ha establecido la cookie "Idioma" de acuerdo con la dirección URL solicitada. Además, la cadena de dirección URL original se ha hecho accesible para la página de ASP.NET a través de la variable de servidor "ORIGINAL_URI".