Site ASP.net MVC : comment rediriger toutes les pages sans www vers les pages avec www ?

Si votre site est hébergé sur un serveur IIS, il se peut que le module de réécriture d'URL ne soit pas disponible. Voici comment écrire ce module soi-même.

Lorsque deux URL de type www.monsite.fr et monsite.fr mènent au même contenu, il est conseillé, en SEO, de n'en privilégier qu'une. Mais si votre site est hébergé sur un serveur IIS 6 ou antérieur, le module de réécriture d'URL n'est pas disponible. Il est alors possible d'écrire son propre module. Ce module sera une classe qui hérite de la classe "HttpModule".
namespace MySite.Classes{  public class ModuleSeo : IHttpModule  {    // Le nom de domaine est stocké dans le fichier web.config : <add key="nomDeDomaine" value="www.monsite.fr" />    private readonly string domaine =                            WebConfigurationManager.AppSettings["nomDeDomaine"];
    #Méthode héritée de la classe IHttpModule    public void Dispose()    {      //Le code de cette méthode est vide, car elle n'est pas utile dans ce cas.    }
    public void Init(HttpApplication context)    {      // On appelle la méthode "OnBeginRequest" pour qu'elle soit exécutée à chaque requête.      context.BeginRequest += OnBeginRequest;    }
    #Fin des méthodes héritées
    private void OnBeginRequest(object source, EventArgs e)    {      var application = (HttpApplication) source;      HttpContext context = application.Context;
      string host = context.Request.Url.Host;      if (!string.IsNullOrEmpty(m_Domain))      {        if (host != m_Domain)        {          // Cette méthode va effectuer le remplacement en conservant le reste des parties de l'URL (port, SSL, paramètres...).          string nouvelleUrl =                context.Request.Url.AbsoluteUri.Replace(host, m_Domain);
          // En SEO, une redirection permanente est préférée pour le référencement.          //À partir de la version 4.0 du langage ASP, vous pouvez remplacer les lignes ci-dessous par "context.Response.PermanentRedirect(nouvelleUrl );".          context.Response.StatusCode = 301;          context.Response.StatusDescription = "Moved Permanently";          context.Response.RedirectLocation = nouvelleUrl;          context.Response.End();        }      }    }  }}

Pour que le module soit lancé, il faut l'ajouter dans le fichier web.config. Insérez la ligne suivante dans la section "<httpModules>", située elle-même dans la section "<system.web>" :<add name="ModuleSeo" type="MySite.Classes.ModuleSeo, MySite" />

Si vous ne souhaitez pas développer votre propre module, vous pouvez également utiliser des modules développés par d'autres :

  • http://iirf.codeplex.com/
  • https://github.com/aspnetde/UrlRewritingNet
  • http://www.isapirewrite.com/
  • http://urlrewriter.net/

La version 7 de IIS apporte en nouveauté le module URL Rewrite, qui peut être utilisé pour effectuer une redirection depuis la version sans "www" vers la version avec "www". Pour cela, ajoutez les lignes suivantes dans le fichier :<system.webServer>
  <httpRedirect enabled="false" destination="http://www.monsite.fr" exactDestination="true" httpResponseStatus="Permanent" />        <rewrite>            <rules>              <rule name="Redirection sur le WWW" stopProcessing="true">                <match url=".*" />                <conditions>                  <add input="" pattern="^monsite.fr$" />                </conditions>                <action type="Redirect" url="http://www.monsite.fr/{R:0}"                     redirectType="Permanent" />              </rule>            </rules>        </rewrite></system.webServer>

Lire aussi :

- .htaccess : mettre en place une redirection sans changer l'URL

Autour du même sujet

Tutoriels SEO