Création de règles de réécriture pour le module de réécriture d’URL

Auteur : Ruslan Yakushev

Le module de réécriture d’URL est une extension d’IIS qui est disponible en téléchargement pour votre serveur IIS autonome. Il est également préinstallé sur tous les sites web hébergés sur Sites Web Windows Azure (WAWS) et mis à votre disposition. Cette procédure pas à pas vous guide tout au long de la création et du test d’un ensemble de règles de réécriture pour le module de réécriture d’URL.

Prérequis

Cette procédure pas à pas requiert les éléments suivants :

  1. IIS 7 ou version ultérieure avec le service de rôle ASP.NET activé.
  2. Module de réécriture d’URL installé. Pour plus d’informations, consultez Utilisation du module de réécriture d’URL.

Configuration d’une page web de test

Pour illustrer le fonctionnement du module de réécriture d’URL, nous utilisons une page de test ASP.NET simple. Cette page lit les variables du serveur web et affiche leurs valeurs dans le navigateur.

Copiez le code ASP.NET suivant et collez-le dans un fichier appelé article.aspx situé dans le dossier %SystemDrive%\inetpub\wwwroot\ :

<%@ 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>

Après avoir copié ce fichier, accédez à http://localhost/article.aspx et vérifiez que la page s’affiche correctement dans un navigateur.

Création d’une règle de réécriture

Nous allons créer une règle de réécriture simple qui réécrira les URL ayant le format suivant :

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

Nous allons créer une règle de réécriture en utilisant l’interface utilisateur Réécriture d’URL dans le Gestionnaire IIS. Pour ce faire, procédez comme suit :

  1. Accédez au Gestionnaire IIS.
  2. Sélectionnez Site web par défaut.
  3. Dans la vue des fonctionnalités, cliquez sur Réécriture d’URL.
    Screenshot that shows the Default Web Site Home pane. U R L Rewrite is selected.
  4. Dans le volet Actions à droite, cliquez sur Ajouter des règles.…
    Screenshot that shows the U R L Rewrite pane.
  5. Dans la boîte de dialogue Ajouter des règles, sélectionnez Règle vide, puis cliquez sur OK.
    Screenshot that shows the Add Rules dialog box.

Vous devez maintenant définir la règle de réécriture à proprement parler. Dans le module de réécriture d’URL, une règle de réécriture se définit en renseignant ces quatre éléments nécessaires :

  • Nom de la règle.
  • Modèle à utiliser pour la correspondance de la chaîne d’URL.
  • Ensemble facultatif de conditions.
  • Action à effectuer s’il y a un modèle correspondant et que toutes les conditions sont satisfaites.

Nommage d’une règle

Dans la zone de texte Nom, entrez un nom qui identifie de manière unique la règle, par exemple « Rewrite to article.aspx ».

Screenshot that shows the Edit Inbound Rule pane.

Définition d’un modèle

Dans la zone de texte Modèle, entrez la chaîne suivante :

^article/([0-9]+)/([_0-9a-z-]+)

Cette chaîne est une expression régulière qui spécifie que le modèle correspond à n’importe quelle chaîne d’URL satisfaisant aux conditions suivantes :

  1. Commence par la séquence de caractères « article/ ».
  2. Contient un ou plusieurs caractères numériques après le premier « / ».
  3. Contient un ou plusieurs caractères alphanumériques, « _ » ou « - » après le deuxième « / ».

Notez que certaines parties de l’expression régulière sont mises entre parenthèses. Ces parenthèses créent des groupes de capture, qui peuvent ensuite être référencés dans la règle avec des références arrières.

Définition d’une action

Comme la règle que vous créez est censée réécrire l’URL, choisissez le type d’action Réécrire dans la zone de groupe Action. Dans la zone de texte Réécrire l’URL :, entrez la chaîne suivante :

article.aspx?id={R:1}&title={R:2}

Cette chaîne spécifie la nouvelle valeur en laquelle réécrire l’URL d’entrée. Notez que les valeurs utilisées comme paramètres de la chaîne de requête, {R:1} et {R:2}, sont les références arrières vers les groupes de capture qui ont été définis à l’aide de parenthèses dans le modèle de règle.

Conservez les valeurs par défaut pour tous les autres paramètres. La page de propriétés Modifier la règle d’entrée doit ressembler à la page suivante :

Screenshot that shows the Edit Inbound Rule property page.

Enregistrez la règle en cliquant sur Appliquer dans le panneau à droite.

Examen de la règle de réécriture dans le fichier config

Les règles de réécriture sont stockées dans le fichier ApplicationHost.config ou dans les fichiers Web.config. Pour vérifier la configuration de la règle que vous venez de créer, ouvrez un fichier Web.config situé dans %SystemDrive%\inetpub\wwwroot. Dans ce fichier, vous voyez la section <rewrite> qui contient cette définition de règle :

<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>

La syntaxe ci-dessus s’applique également à la configuration de la réécriture d’URL dans Web.config dans Sites Web Windows Azure (WAWS).

Test de la règle de réécriture

Pour tester que la règle réécrit correctement les URL, ouvrez un navigateur web et entrez la requête d’URL suivante :

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

Vous devez normalement voir que la règle de réécriture sur votre serveur web a changé l’URL d’origine en Article.aspx et qu’elle a passé « 234 » et « some-title » comme valeurs des paramètres de la chaîne de requête.

Screenshot that shows the U R L Rewrite Module Test Page in Internet Explorer.

Création d’une règle de redirection

Nous allons maintenant créer une règle de redirection qui redirigera toutes les URL ayant ce format :

http://localhost/blog/some-other-title/543
vers le format suivant :
http://localhost/article/543/some-other-title

Avec une règle de redirection, vous pouvez faire pointer plusieurs URL vers une même page web.

Pour cela, ouvrez l’interface utilisateur Réécriture d’URL à partir de la vue des fonctionnalités dans le Gestionnaire IIS. Cliquez sur Ajouter une ou plusieurs règles..., puis sélectionnez de nouveau le modèle Règle vide.

Dans la page Modifier la règle, entrez les informations suivantes :

  • Nom : Redirect from blog (C’est un nom unique pour la règle.)
  • Modèle : ^blog/([_0-9a-z-]+)/([0-9]+) (Ce modèle correspond à la chaîne d’URL qui commence par « blog » et capture les deuxième et troisième segments de l’URL dans des références arrières.)
  • Action : Rediriger (Cette action entraîne le renvoi d’une réponse de redirection au navigateur.)
  • URL de redirection : article/{R:2}/{R:1} (Cette chaîne de substitution est utilisée comme URL de redirection ; notez qu’elle utilise des références arrières pour conserver et réorganiser les éléments de l’URL d’origine capturés pendant la correspondance de modèle.)

Entrez le nom, le modèle et l’action, comme indiqué ci-dessous :

Screenshot that shows the Edit Inbound Rule pane. There are new entries for name, pattern and action.

Entrez l’URL de redirection, comme ci-dessous :

Screenshot that shows the Edit Inbound Rule pane. Under Action type, redirect has been selected and a Redirect U R L is entered.

Conservez les valeurs par défaut pour tous les autres paramètres. Enregistrez la règle en cliquant sur Appliquer dans le panneau à droite.

Test de la règle de redirection

Pour tester que la règle redirige correctement les requêtes, ouvrez un navigateur web et entrez la requête d’URL suivante :

http://localhost/blog/some-other-title/323

Vous devez normalement voir que le navigateur a été redirigé vers http://localhost/article/323/some-other-title suite à l’exécution de la règle de redirection, puis que la requête a été réécrite conformément à la règle de réécriture que vous avez créée précédemment.

Screenshot that shows Internet Explorer on the U R L Rewrite Module Test Page.

Création d’une règle de blocage d’accès

La troisième règle que nous allons créer permet de bloquer toutes les requêtes faites à un site web si leur en-tête d’hôte n’est pas défini. Ce type de règle est utile pour empêcher les tentatives de piratage effectuées en envoyant des requêtes HTTP sur l’adresse IP du serveur au lieu d’utiliser le nom d’hôte.

Nous allons créer cette règle sans utiliser le Gestionnaire IIS. Ouvrez le fichier Web.config dans le dossier %SystemDrive%\inetpub\wwwroot\ que vous avez utilisé pour le fichier de test article.aspx au début de cet article. Recherchez la section <rewrite>. Ajoutez la règle suivante dans la collection de <règles> de façon à ce qu’elle soit la première règle de la collection :

<rule name="Fail bad requests">
  <match url=".*"/>
  <conditions>
    <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
  </conditions>
  <action type="AbortRequest" />
</rule>

La section <rewrite> doit ressembler au code suivant :

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

Analysons la règle pour comprendre ce qu’elle fait.

<match url=".*"/>

L’élément ci-dessus spécifie que la règle correspond à n’importe quelle chaîne d’URL.

<add input="{HTTP_HOST}" pattern="localhost" negate="true" />

L’élément ci-dessus ajoute une condition à la règle qui récupère la valeur de l’en-tête de l’hôte en lisant la variable de serveur HTTP_HOST, la compare au modèle « localhost », puis inverse le résultat de la correspondance. Autrement dit, la condition vérifie que l’en-tête de l’hôte ne correspond pas à « localhost ».

<action type="AbortRequest" />

L’élément ci-dessus indique au module de réécriture d’URL de terminer la requête HTTP.

Test de la règle de blocage d’accès

Pour tester cette règle, ouvrez un navigateur web et effectuez une requête vers http://127.0.0.1/article/234/some-title. Vous devez voir un navigateur qui ne reçoit aucune réponse du serveur. En revanche, si vous faites une requête vers http://localhost/article/234/some-title, le serveur web répond correctement.

Voici la page d’erreur d’affichage :

Screenshot that shows a browser saying, This page can't be displayed.

Voici la page d’affichage réussi :

Screenshot that shows the U R L Rewrite Module Test Page in a browser.

Résumé

Dans cette procédure pas à pas, vous avez appris à configurer des règles de réécriture d’URL en utilisant le Gestionnaire IIS ou en modifiant manuellement les fichiers Web.config. La création des règles dans cette procédure pas à pas a permis d’illustrer certaines fonctionnalités importantes du module de réécriture d’URL, telles que la prise en charge des expressions régulières ainsi que la possibilité d’utiliser des en-têtes HTTP et des variables de serveur pour prendre des décisions de réécriture.