Uso della traccia delle richieste non riuscite per riscrivere le regole

di Ruslan Yakushev

IIS 7.0 e versioni successive di Traccia richiesta non riuscita (FRT) è uno strumento potente per la risoluzione degli errori di elaborazione delle richieste. FRT può essere usato con il modulo di riscrittura URL per tracciare il modo in cui sono state applicate regole di riscrittura all'URL della richiesta. Questa procedura dettagliata illustra come usare FRT per risolvere i problemi e eseguire il debug delle regole di riscrittura dell'URL. Per altre informazioni sulla traccia delle richieste non riuscite, vedere questo articolo.

Prerequisiti

Questa procedura dettagliata richiede i prerequisiti seguenti:

  1. IIS 7.0 o versione successiva con ASP.NET e servizi di ruolo "Traccia" abilitati
  2. Riscrivere la versione go live dell'URL installata

Configurazione di una pagina Web di test

Per illustrare il funzionamento del modulo di riscrittura URL, verrà usata una pagina di test semplice ASP.NET. Questa pagina legge le variabili del server Web e restituisce i relativi valori nel browser.

Copiare il codice ASP.NET seguente e inserirlo nella %SystemDrive%\inetpub\wwwroot\ cartella in un file denominato 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>

Dopo aver copiato questo file, passare a http://localhost/article.aspx e verificare che la pagina sia stata eseguita correttamente in un browser.

Screenshot dell'accesso alla pagina dell'articolo tramite il Web browser.

Configurazione delle regole di riscrittura

Individuare un file web.config nella %SystemDrive%\inetpub\wwwroot\ cartella o crearne uno se non esiste. Aprire web.config file e aggiungere la sezione seguente all'interno dell'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 regola "Fail bad request" interrompe la connessione HTTP se l'intestazione host della richiesta HTTP non corrisponde a "localhost"
  • La regola "Riscrivere in article.aspx" riscrive gli URL da questo formato a questo formato http://localhost/article/234/some-titlehttp://localhost/article.aspx?id=234&title=some-title.

Verificare che le regole siano configurate correttamente aprendo un browser e eseguendo una richiesta a http://localhost/article/234/some-title. Se le regole sono state configurate correttamente, verrà visualizzata la risposta seguente nel browser:

Screenshot della pagina di test del modulo di riscrittura U R L che visualizza la versione originale di U R L e la versione riscritta.

Configurare la traccia della richiesta non riuscita

Abilitare ora la traccia della richiesta non riuscita per un "Sito Web predefinito" (vedere questo articolo per istruzioni dettagliate su come abilitare FRT). Dopo aver abilitato la traccia della richiesta non riuscita, verrà creata una regola FRT per gli eventi di traccia specifici del modulo di riscrittura dell'URL.

Per creare una regola FRT in Gestione IIS, seguire questa procedura:

  1. Fare clic sull'icona "Regole di traccia richieste non riuscite" per accedere all'elenco delle regole FRT.
    Screenshot del riquadro Home sito Web predefinito con regole di traccia delle richieste non riuscite selezionate.
  2. Fare clic su "Aggiungi ..." azione per visualizzare la creazione guidata della regola FRT. Screenshot della finestra di dialogo Aggiungi regola di traccia richiesta non riuscita con Tutto il contenuto (asterisco) selezionato.
  3. Nella prima pagina della procedura guidata scegliere "Tutti i contenuti (*)"
  4. Fare clic su "Avanti" e specificare i codici di stato come "200-399"
    Screenshot dell'impostazione dei codici di stato sul valore 200 trattino 399.
  5. Fare clic su Avanti e quindi deselezionare tutti i provider di traccia, ad eccezione di "WWW Server" e quindi deselezionare tutte le aree del provider, ad eccezione di "Riscrivere" Screenshot dell'impostazione dei provider solo per W W Server e Aree solo per la riscrittura.
  6. Fare clic su Fine per salvare la regola FRT.

Se la traccia richiesta non riuscita è stata installata dopo la riscrittura dell'URL, l'area "Riscrivi" in Provider di traccia potrebbe non essere disponibile. Se non viene visualizzata l'area "Riscrittura" elencata, passare a Aggiungi/Rimuovi programmi e quindi eseguire il programma di installazione del modulo di riscrittura URL in modalità di ripristino.

Analisi del file di log di traccia delle richieste non riuscite

Dopo aver creato la regola FRT, effettuare una richiesta a http://localhost/article/234/some-title. Verrà creato un log FRT in %SystemDrive%\inetpub\Logs\FailedReqLogFiles\. È possibile aprire questo log usando Internet Explorer e verrà eseguito il rendering come documento HTML che può essere facilmente esplorato. Di seguito è riportato un esempio degli eventi specifici di riscrittura dell'URL disponibili nel file di log di traccia:

Screenshot dell'accesso a un log F R T usando un Web browser. Il log mostra l'elenco delle regole di riscrittura e della logica di riscrittura.

Questi eventi mostrano come sono state valutate le regole di riscrittura e come è stato modificato l'URL richiesto tramite la riscrittura del modulo. Verranno illustrati alcuni degli eventi per comprendere meglio la logica di valutazione delle regole:

URL_REWRITE_START : questo evento indica l'inizio degli eventi di riscrittura dell'URL. Le proprietà dell'evento forniscono le informazioni seguenti:

  • La stringa di URL di input è "/article/234/some-title".
  • Non c'era alcuna stringa di query.
  • Scope="Distributed" indica che le regole sono locali, ovvero le regole vengono definite nella Web.config per il sito, anziché globale (ovvero definite a livello di server).

RULE_EVALUATION_START : questo evento indica l'inizio della logica di valutazione delle regole. Le proprietà dell'evento forniscono le informazioni seguenti:

  • La regola usa espressioni regolari per la sintassi dei modelli (patternSyntax="ECMAScript")
  • Le regole successive verranno valutate (StopProcessing = "false")
  • La regola è definita nel livello radice del sito (RelativePath = "/")

PATTERN_MATCH : questo evento fornisce informazioni sul modo in cui l'URL è stato corrispondente al modello di regola. Le proprietà dell'evento forniscono le informazioni seguenti:

  • Il modello di regola era "." (ovvero, corrisponde a qualsiasi carattere)
  • URL di input corrispondente al modello

CONDITIONS_EVALUATION_START - Poiché l'URL di input corrisponde al modello avviato dalla valutazione delle condizioni

CONDITION_EVALUATION : questo evento fornisce le informazioni seguenti:

  • Il valore di HTTP_HOST era "localhost" e corrispondeva al modello
  • Poiché la negazione della condizione è stata specificata nella regola (ad esempio Negated="true") la valutazione della condizione non ha avuto esito positivo.

CONDITIONS_EVALUATION_END - Questo evento mostra che la valutazione delle condizioni per questa regola non ha avuto esito positivo

RULE_EVALUATION_END - Questo evento mostra che la regola non ha modificato l'URL (Successed="false"). Si tratta del fatto che la valutazione della condizione della regola non è riuscita.

RULE_EVALUATION_START : indica anche che la stringa URL è stata passata alla seconda regola

PATTERN_MATCH : questo evento fornisce informazioni sul modo in cui l'URL è stato corrispondente al modello di regola. Le proprietà dell'evento indicano che:

  • Il modello di regola era: "^article/([0-9]+)/([0-9a-z]+)"
  • L'URL di input corrisponde al modello correttamente

REWRITE_ACTION - Questo evento indica che la valutazione della regola ha avuto esito positivo e l'URL è stato riscritto in "/article.aspx" con stringa di query "id=234&title=some-title"

Riepilogo

La riscrittura degli eventi specifici registrati da FRT fornisce informazioni molto dettagliate che possono essere usate per la risoluzione dei problemi e il debug delle regole di riscrittura dell'URL, nonché per comprendere come viene applicata la logica di valutazione delle regole a una stringa URL.