Définition des en-têtes de requête HTTP et des variables de serveur IIS
Auteur : Ruslan Yakushev
Cette section de la documentation s’applique au module de réécriture d’URL version 2.0 pour IIS 7.
Cette procédure pas à pas vous guide tout au long de l’utilisation du module de réécriture d’URL v 2.0 pour définir des en-têtes de requête HTTP et des variables de serveur IIS.
Prérequis
Cette procédure pas à pas nécessite les prérequis suivants :
- IIS 7.0 ou version ultérieure avec ASP.NET service de rôle activé
- Module de réécriture d’URL 2.0 installé.
Configuration d’un scénario de procédure pas à pas
Pour montrer comment utiliser le module de réécriture d’URL 2.0 pour définir des en-têtes HTTP et des variables de serveur IIS, nous allons implémenter un scénario dans lequel l’en-tête cookie HTTP sur la requête est défini en fonction de l’URL demandée. Par exemple, supposons que vous disposez d’une application web qui sert des pages web localisées. L’application web détermine la langue de la réponse en fonction du cookie HTTP dans la requête. Le problème avec cette approche est que les moteurs de recherche n’indexent pas le contenu localisé de cette application, car les analyseurs de moteur de recherche n’utilisent pas de cookies HTTP et, par conséquent, seuls le contenu dans la langue par défaut sera servi par l’application web. Pour résoudre ce problème, vous décidez d’ajouter des informations sur la langue dans le cadre de l’URL, par exemple, http://www.contoso.com/default.aspx
puis utilisez le module de réécriture d’URL 2.0 pour définir le cookie attendu par l’application web afin de déterminer la langue de la réponse. En outre, vous souhaitez définir une autre variable de serveur appelée ORIGINAL_URI qui contiendra la chaîne d’URI demandée à l’origine.
Pour configurer le scénario de procédure pas à pas, copiez le code ASP.NET suivant et placez-le dans le %SystemDrive%\inetpub\wwwroot\
dossier dans un fichier appelé 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>
Après avoir copié ce fichier, accédez à http://localhost/language.aspx
et vérifiez que la page s’affiche correctement dans un navigateur.
Création d’une règle de réécriture
Vous allez créer une règle de réécriture qui réécrit les URL au format suivant :
http://localhost/<language>/anyfile.aspx
sera réécrit comme suit :
http://localhost/anyfile.aspx
La règle de réécriture définit également deux variables de serveur IIS :
- HTTP_COOKIE
- ORIGINAL_URI
Vous allez créer une règle de réécriture à l’aide de l’interface utilisateur de réécriture d’URL dans le Gestionnaire IIS.
Ouvrez le Gestionnaire IIS, choisissez le « Site web par défaut » dans l’arborescence située à gauche, puis ouvrez la fonctionnalité « Réécriture d’URL » :
Autoriser la modification des variables de serveur
Par défaut, les règles de réécriture distribuée (c’est-à-dire les règles définies pour des sites ou des applications web spécifiques) ne peuvent pas définir ou modifier une variable de serveur IIS, sauf si la variable de serveur est ajoutée à la liste « Autorisé ». Pour cette procédure pas à pas, vous devez ajouter les deux variables serveur suivantes à la liste « Variables de serveur autorisées » :
- HTTP_COOKIE
- ORIGINAL_URI
Remarque
la liste « Variables de serveur autorisées » n’est pas applicable aux règles globales, qui sont définies au niveau d’un serveur. Il n’est pas nécessaire d’ajouter une variable de serveur à la liste « Autorisé » si cette variable de serveur est définie à l’aide d’une règle de réécriture globale.
Sélectionnez « Afficher les variables du serveur... » action à partir du volet « Actions » :
Utilisez l’action « Ajouter... » pour ajouter les variables de serveur HTTP_COOKIE et ORIGINAL_URI à la liste « Variables de serveur autorisées » :
Une fois la liste « Variables de serveur autorisées » mise à jour, cliquez sur l’action « Revenir aux règles » pour revenir à l’affichage de liste des règles.
Définition de la carte de réécriture
L’étape suivante consiste à définir une carte de réécriture qui sera utilisée pour mapper la partie URL, représentant la langue à l’identificateur de paramètres régionaux qui sera enregistrée par la règle de réécriture dans l’en-tête de cookie HTTP.
Sélectionnez l’option « Afficher la réécriture Cartes... » action dans le volet « Actions » :
Cliquez sur « Ajouter une carte de réécriture ... » et spécifiez le nom de la carte en tant que « Langues » :
Cette carte définit des mappages entre la partie URL qui représente une langue et l’identificateur de paramètres régionaux à utiliser lors de la définition du cookie de requête HTTP. Cliquez sur « Modifier la carte Paramètres... » action pour spécifier la valeur par défaut à utiliser lorsqu’aucun mappage n’est trouvé. Entrez « en_US » comme valeur par défaut :
Fermez la boîte de dialogue, puis utilisez l’option « Ajouter une entrée de mappage ... » action pour ajouter les mappages suivants :
Valeur d’origine : | Nouvelle valeur: |
---|---|
fr-fr | fr_FR |
de-de | de_DE |
ru-ru | ru_RU |
Définition de la règle de réécriture
Enfin, vous allez créer une règle de réécriture qui définit les variables de serveur à l’aide du mappage de réécriture défini précédemment.
Affichez la boîte de dialogue « Modifier la règle » en cliquant sur « Ajouter des règles ... » action dans la vue principale des fonctionnalités et sélection de la « règle vide » dans la catégorie « Règles de trafic entrant ». Entrez la configuration de la règle comme suit :
Nom de la règle : « définir des variables de serveur »
URL demandée : « Correspond au modèle »
En utilisant : « Expressions régulières »
Modèle : « ^([a-z]{2}-[a-z]{2})/(.*) »
Conditions :
- Entrée : « {Langues :{R :1}} »
- Type : « Correspond aux modèles »
- Modèle
Action :
- Type : « Réécrire »
- URL de réécriture : « {R :2} »
Le modèle de la règle correspond à n’importe quel chemin d’URL qui contient le segment de langue (par exemple, http://www.contoso.com/de-de/default.aspx
). Il capture également le segment de langue et le reste du chemin d’URL dans les références back-references de la règle, afin qu’ils puissent être réutilisés ultérieurement dans la règle. La condition de règle utilise le segment de langue précédemment capturé comme clé de recherche qui est passée à la carte de réécriture « Langues ». Le résultat de la recherche de carte est stocké dans la référence back-reference de la condition. L’action de règle réécrit l’URL pour ne pas contenir le segment de langue.
Développez les « Variables de serveur ... » et spécifiez les valeurs à utiliser pour définir les variables de serveur :
- Nom : HTTP_COOKIE, Valeur : Language={C :1}
- Nom : ORIGINAL_URI, Valeur : http://{HTTP_HOST}{REQUEST_URI}
Le cookie HTTP est défini à l’aide de la référence back-reference de condition, qui contient l’identificateur de paramètres régionaux obtenu à partir de la carte de réécriture « Langues ». La valeur de la variable de serveur ORIGINAL_URI est générée à l’aide des variables serveur {HTTP_HOST} et {REQUEST_URI}.
Cliquez sur « Ok » pour fermer la boîte de dialogue, puis cliquez sur « Appliquer » dans le volet « Actions » sur le côté droit pour enregistrer la règle.
Test de la règle
Pour tester que la règle définit correctement le cookie et une variable de serveur, ouvrez un navigateur web et demandez l’URL suivante :
http://localhost/fr-fr/language.aspx
Vous devez voir que la règle de réécriture a défini le cookie « Language » conformément à l’URL demandée. En outre, la chaîne d’URL d’origine a été rendue accessible pour la page ASP.NET via la variable de serveur « ORIGINAL_URI ».