Comment forcer exemple.com à être redirigé vers www.example.com avec la réécriture d'URL dans IIS7? Quel type de règle devrait figurer dans le fichier web.config? Merci.
Voici l'exemple de Microsoft pour URL Rewrite Module 2.0 qui redirige * .fabrikam.com vers www.fabrikam.com
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Add www" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTP_Host}" pattern="www.fabrikam.com" negate="true" />
</conditions>
<action type="Redirect" url="http://www.fabrikam.com/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Pour le rendre plus générique, vous pouvez utiliser la règle de réécriture d'URL suivante qui fonctionne pour n'importe quel domaine:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Add WWW" stopProcessing="true">
<match url="^(.*)$" />
<conditions>
<add input="{HTTP_Host}" pattern="^(?!www\.)(.*)$" />
</conditions>
<action type="Redirect" url="http://www.{C:0}{PATH_INFO}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
Pas sûr de la meilleure façon de faire cela, mais j'ai un site avec tous les anciens domaines/sous-domaines exécutant ce web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Transfer" stopProcessing="true">
<match url=".*" />
<action type="Redirect" url="http://www.targetsite.com/{R:0}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Semble faire le travail.
Je ne suis pas sûr que cela aide, mais j'ai choisi de le faire au niveau de l'application. Voici un filtre d'action rapide que j'ai écrit pour le faire. Ajoutez simplement la classe quelque part dans votre projet, puis vous pouvez ajouter [RequiertWwww] à une action unique ou à un contrôleur entier.
public class RequiresWww : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase req = filterContext.HttpContext.Request;
HttpResponseBase res = filterContext.HttpContext.Response;
//IsLocal and IsLoopback i'm not too sure on the differences here, but I have both to eliminate local dev conditions.
if (!req.IsLocal && !req.Url.Host.StartsWith("www") && !req.Url.IsLoopback)
{
var builder = new UriBuilder(req.Url)
{
Host = "www." + req.Url.Host
};
res.Redirect(builder.Uri.ToString());
}
base.OnActionExecuting(filterContext);
}
}
Ensuite
[RequiresWwww]
public ActionResult AGreatAction()
{
...
}
ou
[RequiresWwww]
public class HomeController : BaseAppController
{
..
..
}
J'espère que ça aide quelqu'un. À votre santé!