Condividi tramite


Impostazione delle intestazioni della richiesta HTTP e delle variabili del server IIS

di Ruslan Kashšev

Questa sezione della documentazione si applica al modulo di riscrittura URL versione 2.0 per IIS 7.

Questa procedura dettagliata illustra come usare il modulo di riscrittura URL v 2.0 per impostare le intestazioni delle richieste HTTP e le variabili del server IIS.

Prerequisiti

Questa procedura dettagliata richiede i prerequisiti seguenti:

  1. IIS 7.0 o versione successiva con ASP.NET servizio ruolo abilitato
  2. URL Riscrivi modulo 2.0 installato

Configurazione di uno scenario di procedura dettagliata

Per illustrare come usare URL Rewrite Module 2.0 per impostare le intestazioni HTTP e le variabili del server IIS, verrà implementato uno scenario in cui l'intestazione HTTP Cookie nella richiesta è impostata in base all'URL richiesto. Si supponga, ad esempio, di avere un'applicazione Web che gestisce pagine Web localizzate. L'applicazione Web determina la lingua per la risposta in base al cookie HTTP nella richiesta. Il problema con questo approccio è che i motori di ricerca non indicizzano il contenuto localizzato di questa applicazione, perché i crawler del motore di ricerca non usano cookie HTTP e quindi solo il contenuto nella lingua predefinita verrà gestito dall'applicazione Web. Per risolvere questo problema, si decide di aggiungere informazioni sulla lingua come parte dell'URL, ad esempio , http://www.contoso.com/default.aspxe quindi usare il modulo di riscrittura URL 2.0 per impostare il cookie previsto dall'applicazione Web per determinare la lingua per la risposta. Inoltre, si vuole impostare un'altra variabile server denominata ORIGINAL_URI che conterrà la stringa URI richiesta in origine.

Per configurare lo scenario della procedura dettagliata, copiare il codice ASP.NET seguente e inserirlo nella %SystemDrive%\inetpub\wwwroot\ cartella in un file denominato language.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 v2 Test - Setting Server Variables</title>
</head>
<body>
 <h1>Setting HTTP request header and a server variable with URL Rewrite Module v2</h1>
 <p>The value of the Language cookie is <strong><%=( Request.Cookies["Language"] != null ) ? Request.Cookies["Language"].Value : "Cookie not set" %></strong></p>
 <p>The originally requested URI is <strong><%= HttpUtility.HtmlEncode( Request.ServerVariables["ORIGINAL_URI"] ) %></strong></p>
</body>
</html>

Dopo aver copiato questo file, passare a http://localhost/language.aspx e verificare che il rendering della pagina sia stato eseguito correttamente in un browser.

Creazione di una regola di riscrittura

Si creerà una regola di riscrittura che riscrive gli URL usando il formato seguente:

http://localhost/<language>/anyfile.aspx
verrà riscritto come segue:
http://localhost/anyfile.aspx

La regola di riscrittura imposterà anche due variabili del server IIS:

  • HTTP_COOKIE
  • ORIGINAL_URI

Si creerà una regola di riscrittura usando l'interfaccia utente di riscrittura URL in Gestione IIS.

Aprire Gestione IIS, scegliere "Sito Web predefinito" nella visualizzazione albero a sinistra e quindi aprire la funzionalità "Riscrittura URL":

Screenshot della schermata Home del sito Web predefinito di I S Manager con lo stato attivo sull'opzione U R L Rewrite.

Consentire la modifica delle variabili del server

Per impostazione predefinita, le regole di riscrittura distribuita ,ad esempio le regole definite per siti o applicazioni Web specifici, non possono impostare o modificare alcuna variabile del server IIS, a meno che la variabile del server non venga aggiunta all'elenco "Consentito". Per questa procedura dettagliata è necessario aggiungere le due variabili del server seguenti all'elenco "Variabili server consentite":

  • HTTP_COOKIE
  • ORIGINAL_URI

Nota

L'elenco "Variabili server consentite" non è applicabile alle regole globali, definite a livello di server. Non è necessario aggiungere una variabile server all'elenco "Consentito" se tale variabile server è impostata usando una regola di riscrittura globale.

Selezionare "Visualizza variabili server..." azione dal riquadro "Azioni":

Screenshot della schermata U R L Rewrite con lo stato attivo sull'opzione Visualizza variabili server nel riquadro Azioni.

Usare l'azione "Aggiungi..." per aggiungere le variabili del server HTTP_COOKIE e ORIGINAL_URI all'elenco "Variabili server consentite":

Screenshot della finestra di dialogo Aggiungi variabile server con il carattere di sottolineatura ORIGINALE U R immesso come nome della variabile server.

Dopo l'aggiornamento dell'elenco "Variabili server consentite", fare clic sull'azione "Torna a regole" per tornare alla visualizzazione elenco regole.

Definizione della mappa di riscrittura

Il passaggio successivo consiste nel definire una mappa di riscrittura che verrà usata per eseguire il mapping della parte URL, che rappresenta la lingua all'identificatore delle impostazioni locali che verrà salvata dalla regola di riscrittura nell'intestazione del cookie HTTP.

Selezionare "Visualizza riscrivi mappe..." azione nel riquadro "Azioni":

Screenshot della schermata U R L Rewrite con lo stato attivo sull'opzione Visualizza riscrivi mappe nel riquadro Azioni.

Fare clic su "Add Rewrite Map..." e specificare il nome della mappa come "Languages":

Screenshot della finestra di dialogo Aggiungi mappa riscrittura con Lingue immesse come nome della mappa Riscrivi.

Questa mappa definirà i mapping tra la parte URL che rappresenta una lingua e l'identificatore delle impostazioni locali da usare durante l'impostazione del cookie di richiesta HTTP. Fare clic su "Modifica impostazioni mappa..." azione per specificare il valore predefinito da usare quando non è possibile trovare alcun mapping. Immettere "en_US" come valore predefinito:

Screenshot della finestra di dialogo Modifica mappa di riscrittura che mostra E N carattere di sottolineatura U come valore predefinito da usare quando la chiave non viene trovata nella mappa.

Chiudere la finestra di dialogo e quindi usare "Aggiungi voce di mapping..." per aggiungere i mapping seguenti:

Valore originale: Nuovo valore:
fr-fr Fr_fr
de-de de_DE
ru-ru ru_RU

Definizione della regola di riscrittura

Infine, si creerà una regola di riscrittura che imposta le variabili del server usando la mappa di riscrittura definita in precedenza.

Visualizzare la finestra di dialogo "Modifica regola" facendo clic su "Aggiungi regole..." azione nella visualizzazione delle funzionalità principale e selezione della "Regola vuota" dalla categoria "Regole in ingresso". Immettere la configurazione della regola come indicato di seguito:

Screenshot della schermata Modifica regola in ingresso che mostra le sezioni Nome, Corrispondenza U R L, Condizioni, Variabili server e Azioni.

  • Nome regola: "set server variables"

  • URL richiesto: "Corrisponde al modello"

  • Using: "Regular Expressions"

  • Pattern: "^([a-z]{2}-[a-z]{2})/(.*)"

  • Condizioni:

    • Input: "{Languages:{R:1}}"
    • Tipo: "Corrisponde ai modelli"
    • Modello: "(.+)"
  • Azione:

    • Tipo: "Riscrivi"
    • Riscrivere l'URL: "{R:2}"

Il modello della regola corrisponde a qualsiasi percorso URL che contiene il segmento di lingua (ad esempio, http://www.contoso.com/de-de/default.aspx). Acquisisce anche il segmento di lingua e il resto del percorso URL nei riferimenti alle regole, in modo che possano essere riutilizzati più avanti nella regola. La condizione della regola usa il segmento linguistico acquisito in precedenza come chiave di ricerca passata alla mappa di riscrittura "Languages". Il risultato della ricerca della mappa viene archiviato nel back-reference della condizione. L'azione regola riscrive l'URL in modo che non contenga il segmento di lingua.

Espandere "Variabili server..." e specificare i valori da usare per impostare le variabili del server:

Screenshot della finestra di dialogo Variabili server con il carattere di sottolineatura H T T P COOKIE e il carattere di sottolineatura ORIGINALE U R L immessi nel campo Nome.

  • Nome: HTTP_COOKIE, Valore: Language={C:1}
  • Nome: ORIGINAL_URI, Valore: http://{HTTP_HOST}{REQUEST_URI}

Il cookie HTTP viene impostato usando il back-reference della condizione, che contiene l'identificatore delle impostazioni locali ottenuto dalla mappa di riscrittura "Languages". Il valore per la variabile server ORIGINAL_URI viene compilato usando le variabili del server {HTTP_HOST} e {REQUEST_URI}.

Fare clic su "Ok" per chiudere la finestra di dialogo e quindi fare clic su "Applica" nel riquadro "Azioni" sul lato destro per salvare la regola.

Test della regola

Per verificare che la regola imposti correttamente il cookie e una variabile server, aprire un Web browser e richiedere l'URL seguente:

http://localhost/fr-fr/language.aspx

Screenshot della pagina Web U R L Rewrite Module v2 Test con lo stato attivo sulla barra U R L, il cookie Language è impostato su F R underscore F R.

Si noterà che la regola di riscrittura ha impostato il cookie "Language" in base all'URL richiesto. Inoltre, la stringa URL originale è stata resa accessibile per la pagina ASP.NET tramite la variabile del server "ORIGINAL_URI".