Compartir a través de


Uso del FRT para el seguimiento de reglas de reescritura

por Ruslan Yakushev

El seguimiento de solicitudes erróneas (FRT) de IIS 7.0 y versiones posteriores es una herramienta eficaz para solucionar errores de procesamiento de solicitudes. El FRT se puede usar con el módulo de reescritura de direcciones URL para realizar un seguimiento de cómo se aplicaron las reglas de reescritura a la dirección URL de la solicitud. Este tutorial le guiará a través de cómo usar el FRT para solucionar problemas y depurar reglas de reescritura de direcciones URL. Para obtener más información sobre el seguimiento de solicitudes erróneas, consulte este artículo.

Requisitos previos

Para este tutorial se necesitan los siguientes requisitos previos:

  1. IIS 7.0 o superior con ASP.NET y servicios de función "Tracing" activados
  2. Versión Go Live de URL Rewrite instalada

Configuración de una página web de prueba

Para demostrar cómo funciona el módulo de reescritura de direcciones URL, usaremos una página ASP.NET de prueba sencilla. En esta página se leen las variables de servidor web y se generan sus valores en el explorador.

Copie el siguiente código de ASP.NET y colóquelo en la carpeta %SystemDrive%\inetpub\wwwroot\ en un archivo denominado article.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 Test</title>
</head>
<body>
      <h1>URL Rewrite Module Test Page</h1>
      <table>
            <tr>
                  <th>Server Variable</th>
                  <th>Value</th>
            </tr>
            <tr>
                  <td>Original URL: </td>
                  <td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
            </tr>
            <tr>
                  <td>Final URL: </td>
                  <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
            </tr>
      </table>
</body>
</html>

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

Screenshot of accessing the article page through the web browser.

Configuración de reglas de reescritura

Busque un archivo web.config en la carpeta %SystemDrive%\inetpub\wwwroot\ o cree uno si no existe. Abra el archivo web.config y agregue la siguiente sección dentro del elemento <system.webServer>:

<rewrite>
      <rules>
        <rule name="Fail bad requests">
          <match url="." />
          <conditions>
            <add input="{HTTP_HOST}" negate="true" pattern="localhost" />
          </conditions>
          <action type="AbortRequest" />
        </rule>
        <rule name="Rewrite to article.aspx">
          <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
          <action type="Rewrite" url="article.aspx?id={R:1}&amp;title={R:2}" />
        </rule>
      </rules>
</rewrite>
  • La regla "Fail bad requests" anula la conexión HTTP si el encabezado de host de la solicitud HTTP no coincide con "localhost"
  • La regla "Rewrite to article.aspx" reescribe direcciones URL de este formato http://localhost/article/234/some-title a este formato http://localhost/article.aspx?id=234&title=some-title.

Compruebe que las reglas están configuradas correctamente abriendo un explorador y realizando una solicitud a http://localhost/article/234/some-title. Si las reglas se configuraron correctamente, debería ver la siguiente respuesta en el explorador:

Screenshot of the U R L Rewrite Module Test Page that displays the original U R L and the rewritten version.

Configuración del FRT

Ahora habilite el FRT para un "sitio web predeterminado" (consulte este artículo para obtener instrucciones paso a paso sobre cómo habilitar FRT). Después de habilitar el FRT, crearemos una regla de FRT para los eventos de seguimiento específicos del módulo de reescritura de direcciones URL.

Para crear una regla de FRT en el administrador de IIS, siga estos pasos:

  1. Haga clic en el icono "Reglas de FRT" para obtener la lista de reglas.
    Screenshot of the Default Web Site Home pane with Failed Request Tracing Rules selected.
  2. Haga clic en la acción "Agregar…" para abrir el asistente para la creación de reglas de FRT.Screenshot of the Add Failed Request Tracing Rule dialog with All content (asterisk) selected.
  3. En la primera página del asistente, elija "Todo el contenido (*)"
  4. Haga clic en "Siguiente" y especifique los códigos de estado como "200-399"
    Screenshot of setting the status codes to the value of 200 dash 399.
  5. Haga clic en Siguiente y desactive todos los proveedores de seguimiento excepto "Servidor WWW" y desactive todas las áreas del proveedor excepto "Reescritura"Screenshot of setting Providers to only W W W Server and Areas to only Rewrite.
  6. Haga clic en Finalizar para guardar la regla de FRT.

Si el seguimiento de solicitudes con error se instaló después del módulo de reescritura de direcciones URL, es posible que el área "Reescritura" de proveedores de seguimiento no esté disponible. Si no ve el área "Reescritura", vaya a Agregar o quitar programas y, a continuación, ejecute el instalador del módulo de reescritura de direcciones URL en modo de reparación.

Análisis del archivo de registro del FRT

Una vez creada la regla de FRT, realice una solicitud a http://localhost/article/234/some-title. Esto creará un registro del FRT en %SystemDrive%\inetpub\Logs\FailedReqLogFiles\. Puede abrir este registro con Internet Explorer y se representará como un documento HTML que se puede examinar fácilmente. A continuación se muestra un ejemplo de los eventos específicos de reescritura de direcciones URL que se pueden encontrar en el archivo de registro del seguimiento:

Screenshot of accessing an F R T log using a web browser. The log shows the list of rewrite rules and their rewrite logic.

Estos eventos muestran cómo se han evaluado las reglas de reescritura y cómo se modificó la dirección URL solicitada por el módulo de reescritura. Veamos algunos de los eventos para comprender mejor la lógica de evaluación de reglas:

URL_REWRITE_START: este evento indica el inicio de los eventos de reescritura de la dirección URL. Las propiedades del evento proporcionan la siguiente información:

  • La cadena de dirección URL de entrada es "/article/234/some-title".
  • No había ninguna cadena de consulta.
  • Scope="Distributed" indica que las reglas son locales (es decir, las reglas se definen en Web.config para el sitio) en lugar de global (es decir, definidas en el nivel de servidor).

RULE_EVALUATION_START: este evento indica el inicio de la lógica de evaluación de reglas. Las propiedades del evento proporcionan la siguiente información:

  • La regla usa expresiones regulares para la sintaxis de patrón (patternSyntax="ECMAScript")
  • Se evaluarán las reglas posteriores (StopProcessing = "false")
  • La regla se define en el nivel raíz del sitio (RelativePath = "/")

PATTERN_MATCH: este evento proporciona información sobre cómo se ha coinciden las direcciones URL con el patrón de regla. Las propiedades del evento proporcionan la siguiente información:

  • El patrón de regla era "." (es decir, coincide con cualquier carácter)
  • La dirección URL de entrada coincide correctamente con el patrón

CONDITIONS_EVALUATION_START: dado que la dirección URL de entrada coincide con el patrón, se inició la evaluación de condiciones

CONDITION_EVALUATION: este evento proporciona la siguiente información:

  • El valor de HTTP_HOST era "localhost" y coincide con el patrón
  • Dado que la negación de la condición se especificó en la regla (es decir, Negated="true"), la evaluación de la condición no se realizó correctamente.

CONDITIONS_EVALUATION_END: este evento muestra que la evaluación de las condiciones de esta regla no se realizó correctamente

RULE_EVALUATION_END: este evento muestra que la regla no modificó la dirección URL (Succeeded="false"). Esto se debe a que se produjo un error en la evaluación de la condición de regla.

RULE_EVALUATION_START: esto incluso muestra que la cadena de dirección URL se pasó a la segunda regla

PATTERN_MATCH: este evento proporciona información sobre cómo se ha coinciden las direcciones URL con el patrón de regla. Las propiedades del evento nos indican que:

  • El patrón de regla era: "^article/([0-9]+)/([0-9a-z]+)"
  • La dirección URL de entrada coincide correctamente con el patrón

REWRITE_ACTION: este evento indica que la evaluación de la regla se realizó correctamente y la dirección URL se reescribió en "/article.aspx" con la cadena de consulta "id=234&title=some-title"

Resumen

Los eventos específicos de reescritura de direcciones URL registrados por el FRT proporcionan información muy detallada que se puede usar para solucionar problemas y depurar reglas de reescritura de direcciones URL, así como para comprender cómo se aplica la lógica de evaluación de reglas a una cadena de dirección URL.