Establecimiento de encabezados de solicitud HTTP y variables de servidor IIS
Esta sección de la documentación se aplica al módulo URL Rewrite Versión 2.0 para IIS 7.
Este tutorial le guiará a través de cómo usar la versión 2.0 del módulo URL Rewrite para establecer encabezados de solicitud HTTP y variables de servidor IIS.
Requisitos previos
Este tutorial requiere los siguientes requisitos previos:
- IIS 7.0 o posterior con el servicio de rol ASP.NET habilitado
- El módulo URL Rewrite 2.0 instalado
Configuración de un escenario de tutorial
Para demostrar cómo usar el módulo URL Rewrite 2.0 para establecer encabezados HTTP y variables de servidor IIS, implementaremos un escenario en el que el encabezado cookie HTTP 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 servirá 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, y, a continuación, http://www.contoso.com/default.aspx
usa el módulo URL Rewrite 2.0 para establecer la cookie que espera la aplicación web para 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 carpeta %SystemDrive%\inetpub\wwwroot\
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 reescribirá 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":
Permiso para que 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 acción "Ver variables de servidor..." desde 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":
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 dirección URL que representa el idioma al identificador de configuración regional que guardará la regla de reescritura en el encabezado de cookie HTTP.
Seleccione la opción "Ver mapas de reescritura..." acción en el panel "Acciones":
Haga clic en "Agregar mapa de reescritura..." y especifique el nombre del mapa como "Idiomas":
Este mapa definirá las asignaciones entre la parte de dirección URL que representa un idioma y el identificador de configuración regional que se va a usar al establecer la cookie de solicitud HTTP. Haga clic en la acción "Editar configuración de mapa..." para especificar el valor predeterminado que se va a usar cuando no se puede encontrar ninguna asignación. Escriba "en_US" como valor predeterminado:
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: | Valor nuevo: |
---|---|
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 definida anteriormente.
Para abrir el cuadro de diálogo "Editar regla", haga clic en la acción "Agregar reglas..." en la vista de características principal y seleccione "Regla en blanco" en la categoría "Reglas de entrada". Escriba la configuración de la regla como se indica a continuación:
Nombre de regla: "establecer variables de servidor"
Dirección URL solicitada: "Coincide con el patrón"
Uso: "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"
- URL de reescritura: "{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 el resto de la ruta de acceso de la dirección URL en las referencias inversas 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 de mapa se almacena en la referencia inversa de la condición. 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:
- Nombre: HTTP_COOKIE, Valor: Language={C:1}
- Nombre: ORIGINAL_URI, 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 del mapa 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 configuración
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
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".