IIS et l’héritage de la configuration des répertoires virtuels ; le module URL Rewrite à la rescousse
IIS permet d’héberger des sites web et des répertoires virtuels. Un répertoire virtuel est une sorte de sous dossier : un mini site web à l’intérieur d’un site web. Les répertoires virtuels peuvent être pratiques pour héberger des sous application, par exemple des blogs ou un site d’administration.
On pourrait imaginer avoir un site web contenant 2 répertoires virtuels : admin et blogs. La capture d’écran ci-dessous illustre cette configuration.

Cependant attention ! Les répertoires virtuels héritent de la configuration du site web parent. Ainsi, dans notre exemple l’application “blogs” héritera de la configuration du site IISTest. Cela peut être problématique, très souvent on ajoute des httpmodules ou autres fonctionnalités propres à un site web ; l’ajout de ces fonctionnalité peut être non désirées et entrainer des problèmes sur ces sous-sites.
Il est possible de contourner le problème en utilisant le module “Url Rewriter v2.0” de IIS. Comme son nom l’indique, ce module permet de faire de la réécriture d’url, il est téléchargeable via WebPI ou à cette adresse : http://www.iis.net/download/urlrewrite.
L’idée est d’héberger le site web racine dans une application virtuelle puis de rediriger toutes les requêtes vers ce répertoire virtuelle sauf les requêtes allant vers /admin ou /blogs.
Dans un premier temps, il faut alors déplacer tous les fichiers du site web vers un répertoire vitrtuel que l’on pourrait nommer www

Ensuite, au niveau du site web, il faut ajouter la règle de rewriting suivante :

Vous pouvez aussi éditer directement votre fichier de configuration et ajouter les lignes suivantes :
<system.webServer>
<rewrite>
<rules>
<rule name="www redirect">
<match url=".*" />
<action type="Rewrite" url="/www/{R:0}" />
<conditions>
<add input="{SCRIPT_NAME}" pattern="/admin/.*" negate="true" />
<add input="{SCRIPT_NAME}" pattern="/blogs/.*" negate="true" />
<add input="{SCRIPT_NAME}" pattern="/www/.*" negate="true" />
</conditions>
</rule>
</rules>
</rewrite>
</system.webServer>
Ainsi, toutes les requêtes allant vers votre site web seront réécrites vers le répertoire /www/. Puisqu’il s’agit de réécriture (rewriting), l’utilisateur ne verra aucune différence au niveau de l’url.
Et vous, avez-vous déjà eu des problèmes liés à l’héritage de configuration des répertoires virtuels ? Quelle solution avez-vous utilisée ?