Impostazione delle intestazioni della richiesta HTTP e delle variabili del server IIS
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:
- IIS 7.0 o versione successiva con ASP.NET servizio ruolo abilitato
- 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.aspx
e 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":
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":
Usare l'azione "Aggiungi..." per aggiungere le variabili del server HTTP_COOKIE e ORIGINAL_URI all'elenco "Variabili server consentite":
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":
Fare clic su "Add Rewrite Map..." e specificare il nome della mappa come "Languages":
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:
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:
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:
- 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
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".