Importation de règles Apache mod_rewrite
par Ruslan Yakushev
Introduction
Le module de réécriture d’URL dans IIS 7 et versions ultérieures offre une fonctionnalité d’importation qui simplifie considérablement le processus de conversion des règles Apache mod_rewrite en règles de réécriture d’URL IIS. Dans cette procédure pas à pas, vous utilisez la fonctionnalité Importer des règles fournies dans le module de réécriture d’URL pour importer plusieurs règles mod_rewrite dans un fichier de configuration IIS. Si vous n’avez pas encore téléchargé le module de réécriture d’URL, vous pouvez le faire sur https://www.iis.net/downloads/microsoft/url-rewrite.
Configurer un scénario de procédure pas à pas
Pour voir comment convertir des règles mod_rewrite et vérifier que les règles converties fonctionnent correctement, vous implémentez le scénario courant d’application de noms d’hôtes canoniques pour un site web. Dans cet exemple, vous forcez l’utilisation de www.mysite.com
au lieu de mysite.com
, de sorte que quand une demande qui utilise un nom d’hôte autre que www.mysite.com
est envoyée, vous pouvez rediriger la demande vers un nom d’hôte canonique.
Démarrez le Gestionnaire IIS, puis cliquez sur Site web par défaut.
Dans le volet Actions, cliquez sur Liaisons et ajoutez une nouvelle liaison http pour le port 8088.
Figure 1 : Ajouter une nouvelle liaison
Dans le Bloc-notes, ouvrez
%SystemDrive%\windows\system32\drivers\etc\hosts
et ajoutez les deux lignes suivantes à la fin du fichier :127.0.0.1 www_mysite_com 127.0.0.1 mysite_com
Notez que vous utilisez « _ » au lieu de « . » pour les séparateurs de domaine. Cela permet d’empêcher le navigateur web d’essayer de résoudre le nom de domaine avec un serveur DNS (Domain Name System).
Enregistrez le fichier hosts.
Vérifiez que les noms d’hôtes ont été correctement configurés en ouvrant un navigateur web et en accédant aux sites
http://www_mysite_com/iisstart.htm
ethttp://mysite_com/iisstart.htm
.
Convertir des règles mod_rewrite
Les règles Apache mod_rewrite à utiliser pour appliquer des noms d’hôtes canoniques sont les suivantes :
#For sites running on a port other than 80:
RewriteCond %{HTTP_HOST} !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://www_mysite_com:%{SERVER_PORT}/$1 [L,R]
#And for a site running on port 80
RewriteCond %{HTTP_HOST} !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www_mysite_com/$1 [L,R]
Pour convertir ces règles au format propre à la réécriture d’URL IIS :
Démarrez le Gestionnaire IIS.
À gauche, dans le volet Connexions, sélectionnez Site web par défaut.
À droite, dans la vue des fonctionnalités, cliquez sur Réécriture d’URL.
Figure 2 : Cliquer sur Réécriture d’URL
À droite, dans le volet Actions, cliquez sur Importer des règles.
Copiez les exemples de règles mod_rewrite ci-dessus et collez-les dans la zone de texte Règles de réécriture.
Figure 3 : Règles à importer
L’onglet d’arborescence de la zone Règles converties affiche instantanément le résultat de la conversion. Vous pouvez également cliquer sur l’onglet Vue XML pour voir comment les règles sont stockées dans le fichier Web.config.
Figure 4 : Règles converties
Si vous revenez à l’arborescence et sélectionnez un nœud, la directive de règle mod_rewrite correspondante dans la zone de texte Règles de réécriture est mise en surbrillance.
Figure 5 : Arborescence
Notez que pendant la conversion, les règles reçoivent des noms par défaut. Pour remplacer les noms par défaut par un nom plus significatif, sélectionnez une règle dans l’arborescence, cliquez dessus avec le bouton droit, puis sélectionnez Renommer dans le menu contextuel.
Figure 6 : Renommer
Changez le nom de la première règle ImportedRule1 en Rediriger vers www_mysite_com:non-80. Changez le nom de la deuxième règle ImportedRule2 en Rediriger vers www_mysite_com:80.
Dans le volet Actions, cliquez sur Appliquer pour enregistrer les règles converties dans le fichier Web.config, puis sur Retour aux règles.
Figure 7 : Retour aux règles
Tester les règles converties
Pour vérifier que les règles importées à partir du format mod_rewrite fonctionnent correctement, ouvrez un navigateur web et accédez à une des URL suivantes :
http://localhost/iisstart.htm
http://mysite_com/iisstart.htm
Dans les deux cas, le navigateur web est redirigé vers http://www_mysite_com/iisstart.htm
.
Par ailleurs, si vous essayez une de ces URL :
http://localhost:8088/iisstart.htm
http://mysite_com:8088/iisstart.htm
le navigateur web est redirigé vers http://www_mysite_com:8088/iisstart.htm
.
Notez que les règles importées à partir de mod_rewrite ont activé l’application des noms d’hôtes canoniques pour un site web. Une recherche Bing révèle d’autres exemples de règles Apache mod_rewrite.
Exclusion de responsabilité
IMPORTANT : Le module de réécriture d’URL tente de convertir des règles Apache mod_rewrite en règles de réécriture d’URL IIS qui fonctionnent de la même manière. Toutefois, les règles mod_rewrite ne peuvent pas toutes être converties en raison de différences architecturales entre Apache et IIS. Nous vous recommandons vivement d’étudier l’ensemble de règles mod_rewrite pour bien comprendre ses fonctionnalités avant de commencer le processus de conversion. Ensuite, après la conversion en règles de réécriture d’URL IIS, passez en revue et testez le résultat de la conversion pour vérifier que l’ensemble de règles de réécriture IIS correspondant fournit la même logique de réécriture d’URL.
Notez que seules les règles qui suivent la syntaxe Apache mod_rewrite peuvent être converties. Les autres formats de règles de réécriture (par exemple, ISAPI_Rewrite, Ionic ISAPI Rewrite, IISRewrite et autres) ne sont pas reconnus ou sont convertis de manière incorrecte.