mvc maproute examples .net asp.net-mvc url-rewriting

maproute - Enrutar el enlace www a un enlace que no sea www en.net mvc



mvc routing examples (3)

Parece que con la biblioteca de enrutamiento amigable incorporada en .NET MVC, nos permitiría hacer algo como esto.

En caso de que no sea obvio lo que quiero con las cosas integradas en .NET MVC, quiero que una url que empiece por www sea redireccionada automáticamente a una url que no sea www usando el framework MVC.


Hay varias maneras de hacer el redireccionamiento 301 de www a not-www. Prefiero mantener esta lógica de redirección en el nivel ASP.NET (es decir, en mi aplicación) en algunos proyectos, pero otros requieren mejores resultados, como la reescritura url IIS7.

Se discutió en los foros de ASP.NET y elegí usar un WwwFilter en cada controlador. Esto funcionó para mí, sin problemas.


intente agregar esto en su Global.asax :

if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("http://YourSite.com")) { HttpContext.Current.Response.Status = "301 Moved Permanently"; HttpContext.Current.Response.AddHeader("Location", Request.Url.ToString().ToLower().Replace("http://YourSite.com","http://www.YourSite.com")); }

funciona y probado


Puede usar el módulo de reescritura de URL de IIS 7

Puede configurarlo desde IIS o simplemente colocar en su web.config lo siguiente en <system.webServer> :

www a no-www

<rewrite> <rules> <rule name="Canonical" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^www[.](.+)" /> </conditions> <action type="Redirect" url="http://{C:1}/{R:0}" redirectType="Permanent" /> </rule> </rules> </rewrite>

Alternativamente, puede hacer esta redirección en global.asax.cs :

protected void Application_BeginRequest(object sender, EventArgs ev) { if (Request.Url.Host.StartsWith("www", StringComparison.InvariantCultureIgnoreCase)) { Response.Clear(); Response.AddHeader("Location", String.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Host.Substring(4), Request.Url.PathAndQuery) ); Response.StatusCode = 301; Response.End(); } }

Pero recuerda lo que dijo @Sam, mira aquí para más información .

no www a www

<rewrite> <rules> <rule name="Canonical" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^([a-z]+[.]net)$" /> </conditions> <action type="Redirect" url="http://www.{C:0}/{R:0}" redirectType="Permanent" /> </rule> </rules> </rewrite>

Haga un patrón de expresiones regulares para que coincida con su host y use {C:0} 1, 2, ..., N para obtener los grupos coincidentes.