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

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 la création et du test d’une règle de réécriture de trafic sortant pour le module de réécriture d’URL 2.0.

Prérequis

Cette procédure pas à pas nécessite les prérequis suivants :

  1. IIS 7 ou version ultérieure avec le service de rôle ASP.NET activé ;
  2. Module de réécriture d’URL 2.0 RC release installé.

Configuration d’une page web de test

Pour démontrer le fonctionnement du module 2 de réécriture d’URL, vous utiliserez une simple page ASP.NET. Cette page lit les variables du serveur web et affiche leurs valeurs dans le navigateur. Elle construit également un lien hypertexte à l’aide des variables de serveur, puis place ce lien dans le HTML de réponse.

Pour créer la page de test

  1. Créez un fichier nommé article.aspx dans le dossier suivant :

    %SystemDrive%\inetpub\wwwroot\
    
  2. Copiez le balisage ASP.NET suivant, collez-le dans le fichier et enregistrez le fichier :

    <%@ 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. Ouvrez un navigateur web et demandez l’URL suivante pour vous assurer que la page s’affiche correctement :

    http://localhost/article.aspx
    

Ajout d’une règle de réécriture de trafic entrant

L’étape suivante consiste à ajouter une règle qui réécrit les URL au format suivant :

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

Ces URL sont réécrites pour avoir un format comme suit :

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

Pour ajouter la règle de réécriture de trafic entrant :

  1. Ouvrez le fichier web.config situé à l’emplacement suivant :

    %SystemDrive%\inetpub\wwwroot\
    
  2. Sous l’élément /configuration/system.webServer, ajoutez les éléments suivants, puis enregistrez le fichier :

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

Pour plus d’informations sur la création de règles de réécriture de trafic entrant, consultez Création de règles de réécriture pour le module de réécriture d’URL.

Test de la règle de réécriture de trafic entrant

Vous pouvez maintenant tester que la règle de réécriture de trafic entrant fonctionne comme prévu.

Pour tester la règle de réécriture de trafic entrant :

Ouvrez un navigateur web et demandez l’URL suivante :

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

Si la règle de réécriture fonctionne correctement, vous obtiendrez une réponse du serveur qui ressemblera à ce qui suit :

Screenshot of the Final U R L after hovering over the link in the U R L Rewrite Module Test Page using a web browser.

Vous pouvez voir qu’en raison de la règle de trafic entrant, il est possible d’accéder à cette page web à l’aide d’une structure d’URL simple et conviviale. Toutefois, si un utilisateur clique sur le lien hypertexte dans la page HTML, l’URL avec les paramètres de chaîne de requête est utilisée par le navigateur Web. Cela n’est pas préférable pour plusieurs raisons :

  1. Les visiteurs du site web verront la structure d’URL interne que vous souhaitez masquer à l’aide d’une règle de réécriture d’URL.
  2. La même page sera accessible par plusieurs URL, ce qui n’est pas idéal pour l’optimisation du référencement du site auprès d’un moteur de recherche.

Le moyen le plus simple de résoudre ce problème consiste à modifier la page HTML pour utiliser la structure de liens simple. Toutefois, dans de nombreux cas, cela n’est pas possible. Par exemple, si vous avez déjà une application Web complexe ou une application Web que vous ne pouvez pas modifier, la correction de tous les liens URL de l’application peut prendre beaucoup de temps, voire ne pas être possible du tout.

Il s’agit du moment où la réécriture de trafic sortant d’URL peut vous aider. La réécriture de trafic sortant d’URL peut corriger les liens à la volée dans la réponse générée par une application.

Créer une règle de réécriture de trafic sortant

Vous allez maintenant créer une règle de réécriture de trafic sortant qui modifie les URL dans les réponses HTML. La règle modifie les URL qui ont le format suivant :

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

Ces URL sont réécrites comme suit :

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

Vous allez créer une règle de trafic sortant en utilisant l’interface utilisateur de réécriture d’URL dans le gestionnaire IIS.

Pour créer la règle de trafic sortant :

  1. Ouvrez le Gestionnaire IIS
  2. Sélectionnez « Site web par défaut »
  3. Dans la vue des fonctionnalités, sélectionnez « Réécriture d’URL »
    Screenshot of U R L Rewrite selected in the Default Web Site Home pane.
  4. Dans le volet Actions à droite, cliquez sur « Ajouter des règles... ». Dans la boîte de dialogue « Ajouter des règles », sélectionnez « Règle vide » sous la catégorie « Règles de trafic sortant », puis cliquez sur OK.
    Screenshot of selecting a Blank rule template under Outbound rules in the Add Rules dialog.

Vous devez maintenant définir la règle de trafic sortant réelle. Dans le module de réécriture d’URL 2.0, une règle de réécriture de trafic sortant est définie en spécifiant les informations suivantes :

  • Nom de la règle.
  • Condition préalable facultative qui contrôle si cette règle doit être appliquée à une réponse.
  • Modèle à utiliser pour la correspondance de la chaîne dans la réponse.
  • Ensemble facultatif de conditions.
  • Action à effectuer si un modèle est trouvé et que toutes les vérifications de condition ont réussi.

Nommer la règle

Dans la zone de texte « Nom », entrez un nom qui identifie de manière unique la règle, par exemple « Réécriture pour nettoyer l’URL ».

Définition d’une condition préalable

Une condition préalable est utilisée pour déterminer si l’évaluation des règles de trafic sortant doit être effectuée sur une réponse. Par exemple, si une règle modifie le contenu HTML, seules les réponses HTTP dont l’en-tête content-type est défini sur « text/html » doivent être évaluées par rapport à cette règle. L’évaluation des règles de trafic sortant et la réécriture de contenu constituent une opération intensive du processeur qui peut affecter négativement les performances d’une application web. Par conséquent, utilisez des conditions préalables pour limiter les cas d’application de règles de trafic sortant.

Comme la règle que vous créez doit être appliquée uniquement sur les réponses HTML, vous définissez une condition préalable qui vérifie si l’en-tête de réponse HTTP content-type est égal à « text/html ».

Pour définir une condition préalable :

  1. Dans la liste des conditions préalables, sélectionnez « <Créer une condition préalable> ».

  2. Vous êtes dirigé vers la boîte de dialogue de l’éditeur de condition préalable, où vous devez définir la condition préalable. Spécifiez les paramètres de condition préalable de la façon suivante :

    • Nom : « IsHTML »

    • En utilisant : « Expressions régulières »

    • Cliquez sur « Ajouter » pour afficher la boîte de dialogue « Ajouter une condition ». Dans cette boîte de dialogue, spécifiez :

      • Entrée de la condition : « {RESPONSE_CONTENT_TYPE} »

      • Vérifier si la chaîne d’entrée : « Correspond au modèle »

      • Modèle : « ^text/html »

        Screenshot of adding a new pre-condition with the specified settings.

  3. Cliquez sur OK pour enregistrer la condition préalable et revenir à la page « Modifier la règle ».

Définition d’une étendue de correspondance

La règle de réécriture de trafic sortant peut fonctionner sur le contenu d’un en-tête HTTP ou sur le contenu du corps de la réponse. Cette règle doit remplacer les liens dans le contenu de la réponse, donc, dans la liste déroulante « Étendue correspondante » choisissez « Réponse ».

Définir un filtre de balise

Les filtres de balise permettent d’étendre le modèle correspondant à un certain élément HTML uniquement, au lieu d’évaluer la réponse entière par rapport au modèle de la règle. La mise en correspondance des modèles est une opération très gourmande en CPU et, si une réponse entière est évaluée par rapport à un modèle, elle peut ralentir considérablement le temps de réponse de l’application internet. Les filtres de balise vous permettent de définir que la correspondance de modèle doit être appliquée uniquement dans le contenu de certaines balises HTML, ce qui réduit considérablement la quantité de données qui doivent être évaluées par rapport au modèle d’expression régulière.

Pour définir un filtre de balise, développez la liste déroulante « Mettre en correspondance le contenu dans : », puis cochez la case « A (attribut href) ».

Cela définit la règle afin d’appliquer le modèle uniquement à la valeur de l’attribut href du lien hypertexte, comme dans l’exemple suivant :

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

Définition d’un modèle

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

^/article\.aspx\?id=([0-9]+)(?:&|&amp;)title=([_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 qui remplit les conditions suivantes :

  • Commence par la séquence de caractères « /article.aspx? ».
  • Contient un premier paramètre de chaîne de requête qui a une valeur numérique.
  • Contient un deuxième paramètre de chaîne de requête qui a une valeur alphanumérique.

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. En outre, dans la plupart des cas, le symbole « & » est encodé au format HTML dans la réponse, de sorte que le modèle d’expression régulière doit tenir compte de cela.

Définition d’une action

Choisissez le type d’action « Réécrire » dans la zone de groupe « Action ». Dans la zone de texte « Valeur », entrez la chaîne suivante :

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

Cette chaîne spécifie la nouvelle valeur vers laquelle l’adresse du lien doit être réécrite. Notez que pour les valeurs des paramètres de chaîne de requête, l’expression utilise {R:1} et {R:2}, qui sont les références principales aux groupes de capture définis dans le modèle de règle à l’aide de parenthèses.

Conservez les valeurs par défaut pour tous les autres paramètres. La page de propriétés « Modifier la règle » ressemblera à la page suivante :

Screenshot before applying the new Outbound Rewrite Rule with the Is H T M L Pre-condition

Enregistrez la règle en cliquant sur l’action « Appliquer » à 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 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%\inetput\wwwroot\

Dans ce fichier, vous voyez la section <rewrite> qui contient toutes les définitions de règles, comme dans l’exemple suivant :

<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 de la règle

Vous pouvez maintenant tester que la règle réécrit correctement les URL. Ouvrez un navigateur web et demandez l’URL suivante :

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

Vous devez voir que la règle de réécriture de trafic sortant a modifié le lien dans la réponse HTML :

Screenshot of the new U R L after hovering over the link in the U R L Rewrite Module Test Page using a web browser.

Désormais, si un visiteur du site clique sur ce lien, le format URL propre sera utilisé et une représentation URL interne utilisée par cette page ne sera pas révélée.

Résumé

Dans cette procédure pas à pas, vous avez appris à configurer des règles de réécriture de trafic sortant dans le module de réécriture d’URL 2.0 à l’aide du Gestionnaire IIS ou en modifiant manuellement le fichier web.config. Les règles créées dans cette procédure pas à pas ont montré certaines des fonctionnalités importantes du module de réécriture d’URL 2.0, telles que la réécriture de trafic sortant, les conditions préalables et les filtres de balises.