Compartir a través de


Establecimiento de encabezados de solicitud HTTP y variables de servidor IIS

de Ruslan Yakushev

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:

  1. IIS 7.0 o posterior con el servicio de rol ASP.NET habilitado
  2. 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.aspxusa 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":

Screenshot of the I I S Manager's Default Web Site Home screen with a focus on the U R L Rewrite option.

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":

Screenshot of the U R L Rewrite screen with a focus on the View Server Variables option in the Actions pane.

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

Screenshot of the Add Server Variable dialog box with ORIGINAL underscore U R I entered as the Server variable name.

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":

Screenshot of the U R L Rewrite screen with a focus on the View Rewrite Maps option in the Actions pane.

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

Screenshot of the Add Rewrite Map dialog box with Languages entered as the Rewrite map name.

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:

Screenshot of the Edit Rewrite Map dialog box showing E N underscore U S as the default value to use when the key is not found in the map.

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:

Screenshot of the Edit Inbound Rule screen showing the Name, Match U R L, Conditions, Server Variables, and Actions sections.

  • 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:

Screenshot of the Server Variables dialog box with H T T P underscore COOKIE and ORIGINAL underscore U R L entered in the Name field.

  • 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

Screenshot of the U R L Rewrite Module v 2 Test webpage with focus on the U R L bar, the Language cookie is set to F R underscore 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".