Uso della traccia delle richieste non riuscite per riscrivere le regole
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:
- IIS 7.0 o versione successiva con ASP.NET e servizi di ruolo "Traccia" abilitati
- 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.
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}&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-title
http://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:
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:
- Fare clic sull'icona "Regole di traccia richieste non riuscite" per accedere all'elenco delle regole FRT.
- Fare clic su "Aggiungi ..." azione per visualizzare la creazione guidata della regola FRT.
- Nella prima pagina della procedura guidata scegliere "Tutti i contenuti (*)"
- Fare clic su "Avanti" e specificare i codici di stato come "200-399"
- 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"
- 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:
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.