Aller au contenu | Aller au menu | Aller à la recherche

Site membre du réseau Izardev et LCNET

Réecriture d'URL asp.net et IIS

La réecriture d'URL n'est pas seulement possible avec apache et un fichier .htaccess. La technologie Microsoft ASP.net offre également cette fonctionnalité, qui est facile à mettre en place. Un article en fait la description détaillée sur le site MSDN de Microsoft, nous en ferons ici la synthèse pour mettre en place rapidement la réecriture d'URL sur un site internet dynamique.

Le fichier web.config : activer la réecriture

Tout d'abord, il faut indiquer au serveur que l'on souhaite utiliser la réecriture d'URL, lorsque l'on crée un projet Visual Studio, on a par défaut 2 entrées commentées dans le fichier Web.config :

<!--
<httpModules>
 <add type="URLRewriter.ModuleRewriter, URLRewriter" 
 name="ModuleRewriter" />
</httpModules>
-->

<!--
<httpHandlers>
 <add verb="*" path="*.aspx" 
 type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
-->

Décommentez tout d'abord httpModules pour lancer le module de réecriture, ou httpHandlers pour utiliser le gestionnaire de réecriture. Si vous êtes plus habitués au serveur Apache qu'à IIS, ces opérations sont à peu près analogues à :

LoadModule rewrite_module modules/mod_rewrite.so

puis

RewriteEngine On

Les règles de réecritures

Les règles de réecriture sont également placées dans le fichier web.config :

<RewriterConfig>
    <Rules>
        <RewriterRule>
            <LookFor>expression recherchée</LookFor>
            <SendTo>chaine de remplacement</SendTo>
        </RewriterRule>
    </Rules>
    <!-- //...-->
</RewriterConfig>

A chaque règle de réecriture correspond un noeud RewriterRule, l'expression à rechercher dans l'URL est défini dans le sous-noeud LookFor, la page qui sera affichée sera dans le sous-noeud SendTo. Les règles sont évaluées de haut en bas, et le processus s'arrête à la première correspondance (cela correspond au flag [L] d'Apache )

A noter qu'il est possible en utilisant la classe ModuleRewriter de personnaliser les comportements de la réecriture, ce qui est particulièrement appréciable.

Exemple ancien/nouveau :

Le classique :

<RewriterRule>
    <LookFor>~/nouveau\.aspx</LookFor>
    <SendTo>~/ancien.aspx</SendTo>
</RewriterRule>

Exemple avec une URL dynamique :

L'utilisation d'expression régulière est bien entendu possible :

<RewriterRule>
    <LookFor>~/(\S*)\.aspx</LookFor>
    <SendTo>~/page.aspx?id=$1</SendTo>
</RewriterRule>

La requête http "ma_page.aspx" sera équivalente à "page.aspx?id=ma_page".

Intérêts de la réecriture d'URL

Intérêt de la réecriture d'URL pour le référencement naturel

D'après les dires, la réécriture d'URL ne serait plus d'actualité pour un bon référencement naturel.

Je ne suis pas totalement d'accord : certes les moteurs de recherches indexent très bien les pages web comprenant des variables, mais ils attribuent une importance non négligeable au texte des URLs, la réecriture permet d'éliminer tous les textes inutiles (exemple : nom de variable pas représentatif, extension...).

Intérêt de la réecriture d'URL pour l'ergonomie

De plus, il arrive que les utilisateurs avertis surfent directement en modifiant l'URL dans leur barre d'adresse, la suggestion du navigateur permet à l'utilisateur de plus facilement identifier la page qu'il souhaite trouver.

Conclusion

La réecriture d'URL n'est pas une exclusivité d'Apache, c'est parfaitement possible de l'implémenter sur un site .NET. C'est même plus simple, et plus facilement personnalisable à mon sens.

Encore aujourd'hui, il y a toujours un intérêt à réecrire ses URLs, en terme de référencement et d'ergonomie.

Partagez cet article !

  • Delicious
  • Stumbleupon
  • Digg
  • Facebook
  • Google
  • Linkedin
  • Yahoo Buzz
  • Twitter
Vous avez apprécié cet article ?

Commentaires S'abonner au flux RSS des commentaires

  1. Chris | redirection 301 |
    Impeccable merci pour cet article, par contre j'avais une question, une fois toute la réecriture ok, comment indiqué une redirection 301 de ces pages réecrites dans le web.config ?
    Mon pb est que j'ai une page dynamique qui affiche un produit différent suivant les variables passées dans l'url, pour l'url rewriting impecc, mais pour la redirection je ne sais trop comment faire..;
    j'ai vu qu'on pouvait mettre dans l'ente de la page une conditions et la redirection 301 mais vu le nb de cas de produits pour cette page je vais avoir un header de 5000 lignes !!

    qqun a une idée ?

    merci d'avance.

    newverbal@yahoo.fr
  2. Stéphane Le Merre | Re : incohérence ou incompréhension |
    Bonjour,

    C'est exactement ce que j'ai voulu dire, merci d'avoir prêté attention !
  3. Rey | incohérence ou incompréhension |
    Bonjour,
    Je relève une incohérence au niveau de la configuration du Rewriter et l'exemple que vous donnez :
    votre exemple :
    <RewriterRule>
    <LookFor>~/(\S*)\.aspx</LookFor>
    <SendTo>~/page.aspx?id=$1</SendTo>
    </RewriterRule>
    Cela redirigera "page.aspx?id=ma_page" vers "ma_page.aspx".

    le fonctionnement :
    l'expression à rechercher dans l'URL est défini dans le sous-noeud LookFor, la page qui sera affichée sera dans le sous-noeud SendTo.

    Ce qui est le contraire de l'exemple. Ou alors, vous n'utilisez pas les bons termes. Peut-être avez-vous voulu dire <<Cela affichera "ma_page.aspx" au lieu de "page.aspx?id=ma_page">> ?

Ajouter un commentaire

Les commentaires sont tous validés par un modérateur, votre commentaire n'apparaît pas directement sur le site.
Aucun support n'est assuré ici, vous pouvez néanmoins laisser vos remarques et critiques sur l'article, les points de vue pertinents sont toujours les bienvenus.