Condividi tramite


Creazione di regole in uscita per il modulo di riscrittura URL

di Ruslan Yakushev

Questa sezione della documentazione si applica all'URL Riscrivere modulo versione 2.0 per IIS 7.

Questa procedura dettagliata illustra come creare e testare una regola di riscrittura in uscita per l'URL Riscrivere modulo 2.0.

Prerequisiti

Questa procedura dettagliata richiede i prerequisiti seguenti:

  1. IIS 7 o versione successiva con ASP.NET servizio ruolo abilitato;
  2. URL Riscrivere il modulo 2.0 RC installato.

Configurazione di una pagina Web di test

Per illustrare il funzionamento del modulo di riscrittura dell'URL 2, si userà una semplice pagina di ASP.NET. Questa pagina legge le variabili del server Web e visualizza i relativi valori nel browser. Costruisce anche un collegamento ipertestuale usando le variabili del server e quindi inserisce tale collegamento nel codice HTML della risposta.

Per creare la pagina di test

  1. Creare un file denominato article.aspx nella cartella seguente:

    %SystemDrive%\inetpub\wwwroot\
    
  2. Copiare il markup ASP.NET seguente, incollarlo nel file e salvare il file:

    <%@ 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</title>
    </head>
    <body>
        <h1>URL Rewrite Module v2 Test Page</h1>
        <h2>Inbound URL Rewriting</h2>
        <table>
            <tr>
                <th>Server Variable</th>
                <th>Value</th>
            </tr>
            <tr>
                <td>Original URL: </td>
                <td><%= Request.ServerVariables["UNENCODED_URL"] %></td>
            </tr>
            <tr>
                <td>Final URL: </td>
                <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
            </tr>
        </table>
        <h2>Outbound URL Rewriting</h2>
            <a href="<%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %>">Here</a> is the link to this article.
    </body>
    </html>
    
  3. Aprire un Web browser e richiedere l'URL seguente per assicurarsi che la pagina venga eseguita correttamente:

    http://localhost/article.aspx
    

Aggiunta di una regola di riscrittura in ingresso

Il passaggio successivo consiste nell'aggiungere una regola che riscrive gli URL con il formato seguente:

http://localhost/article/342/some-article-title

Questi URL verranno riscritti per avere un formato simile al seguente:

http://localhost/article.aspx?id=342&title=some-article-title

Per aggiungere la regola di riscrittura in ingresso:

  1. Aprire il file web.config che si trova nel percorso seguente:

    %SystemDrive%\inetpub\wwwroot\
    
  2. Nell'elemento /configuration/system.webServer aggiungere quanto segue e quindi salvare il file:

    <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}&amp;title={R:2}" />
        </rule>
      </rules>
    </rewrite>
    

Per altre informazioni sulla creazione di regole di riscrittura in ingresso, vedere Creazione di regole di riscrittura per il modulo di riscrittura URL.

Test della regola di riscrittura in ingresso

È ora possibile testare che la regola di riscrittura in ingresso funzioni come progettato.

Per testare la regola di riscrittura in ingresso:

Aprire un Web browser e richiedere l'URL seguente:

http://localhost/article/342/some-article-title

Se la regola di riscrittura funziona correttamente, verrà visualizzato un modulo di risposta simile al seguente:

Screenshot della pagina di test del modulo di riscrittura del modulo U R L finale dopo il puntatore del mouse sul collegamento.

È possibile notare che a causa della regola in ingresso è possibile accedere a questa pagina Web usando una struttura URL semplice e descrittiva. Tuttavia, se un utente fa clic sul collegamento ipertestuale all'interno della pagina HTML, l'URL con parametri stringa di query verrà usato dal Web browser. Questo non è preferibile per diversi motivi:

  1. I visitatori del sito Web visualizzeranno la struttura di URL interna che si vuole nascondere usando una regola di riscrittura URL.
  2. La stessa pagina sarà accessibile da più URL, che non è ideale per l'ottimizzazione del motore di ricerca.

Il modo più semplice per risolvere questo problema consiste nel modificare la pagina HTML per usare la struttura di collegamento semplice. Tuttavia, in molti casi questo non è possibile. Ad esempio, se si dispone già di un'applicazione Web legacy complessa o di un'applicazione Web a cui non è possibile apportare modifiche, l'attività di correzione di tutti i collegamenti URL nell'applicazione può richiedere molto tempo o non è possibile.

Questo è quando la riscrittura dell'URL in uscita può essere utile. La riscrittura dell'URL in uscita può correggere i collegamenti in un riquadro a comparsa nella risposta generata da un'applicazione.

Creare una regola di riscrittura in uscita

Verrà ora creata una regola di riscrittura in uscita che modifica gli URL nelle risposte HTML. La regola modifica gli URL con il formato seguente:

http://localhost/article.aspx?id=342&title=some-article-title

Questi URL verranno riscritti come segue:

http://localhost/article/342/some-article-title

Verrà creata una regola in uscita usando l'interfaccia utente Di riscrittura URL in Gestione IIS.

Per creare la regola in uscita:

  1. Aprire Gestione IIS
  2. Selezionare "Sito Web predefinito"
  3. Nella visualizzazione funzionalità selezionare "Riscrittura URL"
    Screenshot di U R L Rewrite selezionata nel riquadro Home sito Web predefinito.
  4. Nel riquadro Azioni sul lato destro fare clic su "Aggiungi regole...". Nella finestra di dialogo "Aggiungi regole" selezionare la categoria "Regola vuota" nella categoria "Regole in uscita" e fare clic su OK.
    Screenshot della selezione di un modello di regola vuota in Regole in uscita nella finestra di dialogo Aggiungi regole.

È ora necessario definire la regola effettiva in uscita. Nella regola di riscrittura URL 2.0 del modulo 2.0 viene definita una regola di riscrittura in uscita specificando le informazioni seguenti:

  • Nome della regola.
  • Precondizione facoltativa che controlla se questa regola deve essere applicata a una risposta.
  • Modello da usare per la corrispondenza della stringa nella risposta.
  • Set facoltativo di condizioni.
  • Azione da eseguire se un modello è corrispondente e tutti i controlli delle condizioni hanno avuto esito positivo.

Denominazione della regola

Nella casella di testo "Nome" immettere un nome che identificherà in modo univoco la regola, ad esempio "Riscrivere per pulire l'URL".

Definizione di una precondizione

Una precondizione viene usata per valutare se la valutazione delle regole in uscita deve essere eseguita su una risposta. Ad esempio, se una regola che modifica il contenuto HTML, è consigliabile valutare solo le risposte HTTP con intestazione di tipo contenuto impostata su "text/html". La valutazione delle regole in uscita e la riscrittura del contenuto è un'operazione che può influire negativamente sulle prestazioni di un'applicazione Web. Pertanto, usare le precondizioni per limitare i casi in cui vengono applicate regole in uscita.

Poiché la regola che si sta creando deve essere applicata solo alle risposte HTML, si definirà una precondizione che verifica se il tipo di contenuto dell'intestazione di risposta HTTP è equialziale a "text/html".

Per definire una precondizione:

  1. Nell'elenco Pre-condizioni selezionare "<Crea nuova condizione pre-condizione>".

  2. Verrà visualizzata la finestra di dialogo Dell'editor pre-condizione, in cui sarà necessario definire la precondizione. Specificare le impostazioni di precondizione come indicato di seguito:

    • Nome: "IsHTML"

    • Uso: "Espressioni regolari"

    • Fare clic su "Aggiungi" per visualizzare la finestra di dialogo "Aggiungi condizione". In questa finestra di dialogo specificare:

      • Input condizione: "{RESPONSE_CONTENT_TYPE}"

      • Controllare se la stringa di input: "Corrisponde al modello"

      • Modello: "^text/html"

        Screenshot dell'aggiunta di una nuova condizione preliminare con le impostazioni specificate.

  3. Fare clic su OK per salvare la precondizione e tornare alla pagina "Modifica regola".

Definizione di un ambito corrispondente

La regola di riscrittura in uscita può funzionare sul contenuto di un'intestazione HTTP o sul contenuto del corpo della risposta. Questa regola deve sostituire i collegamenti nel contenuto della risposta, quindi nell'elenco a discesa "Ambito corrispondente" scegliere "Risposta".

Definizione di un filtro tag

I filtri tag vengono usati per definire l'ambito del modello corrispondente a un determinato elemento HTML, anziché valutare l'intera risposta rispetto al modello della regola. La corrispondenza dei modelli è un'operazione molto intensivo della CPU e se un'intera risposta viene valutata in base a un modello, può rallentare significativamente il tempo di risposta dell'applicazione Web. I filtri tag consentono di specificare che la corrispondenza dei modelli deve essere applicata solo all'interno del contenuto di determinati tag HTML, riducendo in modo significativo la quantità di dati che deve essere valutata rispetto al modello di espressione regolare.

Per definire un filtro tag, espandere l'elenco a discesa "Corrisponde al contenuto all'interno: " e quindi selezionare e selezionare la casella di controllo "A (attributo href)".

Questa regola imposta la regola per applicare il modello solo al valore dell'attributo href del collegamento ipertestuale, come nell'esempio seguente:

<a href="this string will be used for pattern matching">Some link</a>

Definizione di un modello

Nella casella di testo "Pattern" immettere la stringa seguente:

^/article\.aspx\?id=([0-9]+)(?:&|&amp;)title=([_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 "/article.aspx?".
  • Contiene un primo parametro stringa di query con valore numerico.
  • Contiene un secondo parametro stringa di query con valore alfanumerico.

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. Inoltre, nella maggior parte dei casi il simbolo "&" è codificato IN HTML nella risposta, quindi il modello di espressione regolare deve tenere presente questo aspetto.

Definizione di un'azione

Scegliere il tipo di azione "Riscrivi" nella casella di gruppo "Azione". Nella casella di testo "Valore" immettere la stringa seguente:

/article/{R:1}/{R:2}

Questa stringa specifica il nuovo valore a cui deve essere riscritto l'indirizzo del collegamento. Si noti che per i valori dei parametri della stringa di query l'espressione usa {R:1} e {R:2}, ovvero i back-reference ai gruppi di acquisizione definiti nel modello di regola usando parentesi.

Lasciare i valori predefiniti per tutte le altre impostazioni. La pagina delle proprietà "Modifica regola" sarà simile alla pagina seguente:

Screenshot prima di applicare la nuova regola di riscrittura in uscita con la condizione pre-condizione Is H T M L

Salvare la regola facendo clic sull'azione "Applica" sul lato destro.

Visualizzazione della regola di riscrittura nel file di configurazione

Le regole di riscrittura vengono archiviate nel file aplicationHost.config o nei file web.config . Per controllare la configurazione della regola appena creata, aprire un file web.config che si trova in

%SystemDrive%\inetput\wwwroot\

In questo file viene visualizzata la <rewrite> sezione contenente tutte le definizioni delle regole, come nell'esempio seguente:

<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}&amp;title={R:2}" />
  </rule>
 </rules>
 <outboundRules>
  <rule name="Rewrite to clean URL" preCondition="IsHTML">
   <match filterByTags="A" pattern="^/article\.aspx\?id=([0-9]+)(?:&amp;|&amp;amp;)title=([_0-9a-z-]+)$" />
   <action type="Rewrite" value="/article/{R:1}/{R:2}" />
  </rule>
  <preConditions>
   <preCondition name="IsHTML">
    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
   </preCondition>
  </preConditions>
 </outboundRules>
</rewrite>

Test della regola

È ora possibile verificare che la regola riscriva correttamente gli URL. Aprire un Web browser e richiedere l'URL seguente:

http://localhost/article/342/some-article-title

Si noterà che la regola di riscrittura in uscita ha modificato il collegamento all'interno della risposta HTML:

Screenshot del nuovo U R L dopo aver posizionato il puntatore del mouse sul collegamento nella pagina di test del modulo di riscrittura U R L usando un Web browser.

Ora, se un visitatore del sito fa clic su questo collegamento, verrà usato il formato url pulito e non verrà visualizzata una rappresentazione URL interna usata da questa pagina.

Riepilogo

In questa procedura dettagliata si è appreso come configurare le regole di riscrittura in uscita nel modulo di riscrittura URL 2.0 usando Gestione IIS o modificando manualmente web.config file. Le regole create in questa procedura dettagliata hanno illustrato alcune delle funzionalità importanti del modulo di riscrittura URL 2.0, ad esempio la riscrittura in uscita, le precondizioni e i filtri tag.