Creazione di regole di riscrittura per il modulo di riscrittura URL
Il modulo di riscrittura URL è un'estensione di IIS disponibile come download per il server IIS autonomo e viene preinstallato anche in qualsiasi sito Web in Siti Web di Windows Azure (WAWS) e disponibile per l'uso. Questa procedura dettagliata illustra come creare e testare un set di regole di riscrittura per il modulo di riscrittura URL.
Prerequisiti
Questa procedura dettagliata richiede i prerequisiti seguenti:
- IIS 7 o versione successiva con ASP.NET servizio ruolo abilitato.
- Modulo di riscrittura URL installato. Per altre informazioni, vedere Uso del modulo di riscrittura URL.
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 cartella %SystemDrive%\inetpub\wwwroot\ 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.
Creazione di una regola di riscrittura
Verrà creata una semplice regola di riscrittura che riscriverà gli URL usando il formato seguente:
http://localhost/article/342/some-article-title
in:
http://localhost/article.aspx?id=342&title=some-article-title
.
Verrà creata una regola di riscrittura usando l'interfaccia utente di riscrittura URL in Gestione IIS. A questo scopo, seguire questa procedura:
- Passare a Gestione IIS.
- Selezionare Sito Web predefinito.
- Nella visualizzazione funzionalità fare clic su URL Riscrivere.
- Nel riquadro Azioni sul lato destro fare clic su Aggiungi regole...
- Nella finestra di dialogo Aggiungi regole selezionare Regola vuota e fare clic su OK.
È ora necessario definire la regola di riscrittura effettiva. Nel modulo di riscrittura URL viene definita una regola di riscrittura specificando quattro informazioni necessarie:
- Nome della regola.
- Modello da usare per la corrispondenza della stringa URL.
- Set facoltativo di condizioni.
- Azione da eseguire se un modello è corrispondente e se tutti i controlli delle condizioni hanno esito positivo.
Denominazione di una regola
Nella casella di testo Nome immettere un nome che identifica in modo univoco la regola, ad esempio "Riscrivere in article.aspx".
Definizione di un modello
Nella casella di testo Pattern immettere la stringa seguente:
^article/([0-9]+)/([_0-9a-z-]+)
Questa stringa è un'espressione regolare che specifica che il modello corrisponderà a qualsiasi stringa DI URL che soddisfi le condizioni seguenti:
- Inizia con la sequenza di caratteri "articolo/".
- Contiene uno o più caratteri numerici dopo il primo "/".
- Contiene uno o più caratteri alfanumerici o "_" o "-" dopo il secondo "/".
Si noti che alcune parti dell'espressione regolare sono tra parentesi. Queste parentesi creano gruppi di acquisizione, a cui è possibile fare riferimento in un secondo momento nella regola usando i riferimenti back-reference.
Definizione di un'azione
Poiché la regola creata dovrebbe riscrivere l'URL, scegliere il tipo di azione Di riscrittura elencato nella casella Gruppo di azioni . Nella casella di testo Riscrivere l'URL: immettere la stringa seguente:
article.aspx?id={R:1}&title={R:2}
Questa stringa specifica il nuovo valore a cui deve essere riscritto l'URL di input. Si noti che per i valori dei parametri della stringa di query è stato usato {R:1} e {R:2}, che sono riferimenti indietro ai gruppi di acquisizione definiti nel modello di regola usando parentesi.
Lasciare i valori predefiniti per tutte le altre impostazioni. La pagina Della proprietà Modifica regola in ingresso dovrebbe essere simile alla pagina seguente:
Salvare la regola facendo clic su Applica sul lato destro.
Visualizzazione della regola di riscrittura nel file di configurazione
Le regole di riscrittura vengono archiviate nel file ApplicationHost.config o nei file di Web.config. Per controllare la configurazione della regola appena creata, aprire un file Web.config che si trova in %SystemDrive%\inetpub\wwwroot. In questo file verrà visualizzata la <rewrite>
sezione contenente questa definizione di regola:
<rewrite>
<rules>
<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 sintassi precedente si applica anche alla configurazione della riscrittura DELL'URL in Web.config in Siti Web di Windows Azure (WAWS).
Test della regola di riscrittura
Per verificare che la regola riscriva correttamente gli URL, aprire un Web browser e richiedere l'URL seguente:
http://localhost/article/234/some-title
Si noterà che la regola di riscrittura nel server Web ha modificato l'URL originale in Article.aspx e ha passato "234" e "some-title" come valori per i parametri della stringa di query.
Creazione di una regola di reindirizzamento
Verrà ora creata una regola di reindirizzamento che reindirizzerà tutti gli URL nel formato seguente:
http://localhost/blog/some-other-title/543
nel formato seguente:
http://localhost/article/543/some-other-title
Una regola di reindirizzamento consente a più URL di puntare a una singola pagina Web.
A tale scopo, aprire l'interfaccia utente della visualizzazione funzionalità di riscrittura URL in Gestione IIS. Fare clic su Aggiungi regola...e quindi selezionare di nuovo il modello Regola vuota .
Nella pagina Modifica regola immettere quanto segue:
- Nome: reindirizzare dal blog (nome univoco per la regola).
- Pattern: ^blog/([_0-9a-z-]+)/([0-9]+) (Questo modello corrisponde alla stringa URL che inizia con "blog" e acquisisce i secondi e i terzi segmenti dell'URL in back-references.
- Azione: Reindirizzamento (l'azione di reindirizzamento causerà l'invio di una risposta di reindirizzamento al browser).
- URL di reindirizzamento: articolo/{R:2}/{R:1} (questa stringa di sostituzione verrà usata come URL di reindirizzamento; si noti che usa riferimenti indietro per mantenere e ridisporre le parti dell'URL originale acquisite durante la corrispondenza del modello).
Immettere il nome, il modello e l'azione, come illustrato di seguito:
Immettere l'URL di reindirizzamento come illustrato di seguito:
Lasciare i valori predefiniti per tutte le altre impostazioni. Salvare la regola facendo clic su Applica sul lato destro.
Test della regola di reindirizzamento
Per verificare che la regola reindirizzi correttamente le richieste, aprire un Web browser e richiedere l'URL seguente:
http://localhost/blog/some-other-title/323
Si noterà che il browser è stato reindirizzato a http://localhost/article/323/some-other-title
come risultato dell'esecuzione della regola di reindirizzamento e quindi la richiesta è stata riscritta in conformità alla regola di riscrittura creata in precedenza.
Creazione di una regola di blocco di accesso
La terza regola creata viene usata per bloccare tutte le richieste effettuate a un sito Web se tali richieste non dispongono del set di intestazioni host. Questo tipo di regola è utile quando si desidera evitare tentativi di hacking effettuati eseguendo richieste HTTP sull'indirizzo IP del server anziché usando il nome host.
Verrà creata questa regola senza usare Gestione IIS. Aprire il file Web.config nella %SystemDrive%\inetpub\wwwroot\
cartella usata per il file di test article.aspx all'inizio di questo articolo. Individuare la sezione <rewrite>
. Inserire la regola seguente nell'insieme <regole> , in modo che sia la prima regola nella raccolta:
<rule name="Fail bad requests">
<match url=".*"/>
<conditions>
<add input="{HTTP_HOST}" pattern="localhost" negate="true" />
</conditions>
<action type="AbortRequest" />
</rule>
La <rewrite>
sezione dovrebbe essere simile al codice seguente:
<rewrite>
<rules>
<rule name="Fail bad requests">
<match url=".*"/>
<conditions>
<add input="{HTTP_HOST}" pattern="localhost" negate="true" />
</conditions>
<action type="AbortRequest" />
</rule>
<rule name="Redirect from blog">
<match url="^blog/([_0-9a-z-]+)/([0-9]+)" />
<action type="Redirect" url="article/{R:2}/{R:1}" redirectType="Found" />
</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>
Analizziamo la regola per comprendere cosa fa.
<match url=".*"/>
L'elemento precedente indica che la regola corrisponderà a qualsiasi stringa URL.
<add input="{HTTP_HOST}" pattern="localhost" negate="true" />
L'elemento precedente aggiunge una condizione alla regola che recupera il valore dell'intestazione host leggendo la variabile del server HTTP_HOST, la corrisponde al modello "localhost" e quindi nega il risultato della corrispondenza. In altre parole, la condizione verifica che l'intestazione host non corrisponda a "localhost".
<action type="AbortRequest" />
L'elemento precedente indica al modulo di riscrittura URL per terminare la richiesta HTTP.
Test della regola del blocco di accesso
Per testare questa regola, aprire un Web browser e effettuare una richiesta a http://127.0.0.1/article/234/some-title
. Ciò che dovrebbe essere visualizzato è un browser che non riceve alcuna risposta dal server. Tuttavia, se si richiede http://localhost/article/234/some-title
, il server Web risponderà correttamente.
La visualizzazione non riuscita sarà la seguente:
La visualizzazione riuscita sarà la seguente:
Riepilogo
In questa procedura dettagliata si è appreso come configurare le regole di riscrittura dell'URL usando gestione IIS o modificando manualmente i file Web.config. Le regole create in questa procedura dettagliata hanno illustrato alcune delle principali funzionalità del modulo di riscrittura URL, ad esempio il supporto delle espressioni regolari e la possibilità di usare intestazioni HTTP e variabili del server per prendere decisioni di riscrittura.