2010-02-01 25 views
9

Tenemos un sitio web en dominio.com, que también se puede acceder a través de una entrada CNAME para www.dominio.com que apunta a dominio.com. Nos gustaría que todos los visitantes de www.dominio.com sean redireccionados a dominio.com usando un redireccionamiento 301. ¿Cuál es la mejor manera de implementar esto en asp.net mvc? En global.asax?Asp.net mvc 301 redirige de www.dominio.com a dominio.com

+4

La forma más sencilla es crear otro sitio web en IIS para controlar la redirección. No necesitaría código: la redirección de IIS podría tratarlo automáticamente. –

+1

De hecho. IIS es el camino a seguir. Realmente no desea atar su aplicación con este tipo de cosas cuando IIS lo hace de forma gratuita. IIS7 es su mejor apuesta aquí. –

+1

El problema aquí es que el sitio está en una granja situada detrás de un equilibrador de carga sobre el cual tenemos poco control. El host resuelve la dirección IP interna del servidor y el nombre de host original se vuelve a empaquetar en un encabezado "x-forward-host". Por lo que puedo ver, esto descarta usar la característica IIS7 HTTP Redirect. – spender

Respuesta

22

Acepto que hacer esto en el nivel de aplicación no es deseable según los comentarios a la pregunta.

La instalación de la función de redirección de HTTP en IIS7 es la mejor manera de hacerlo.

En nuestro caso, otras restricciones nos obligan a hacerlo a nivel de aplicación.

Este es el código que usamos en Global.asax para realizar la redirección:

private static readonly Regex wwwRegex = 
     new Regex(@"www\.(?<mainDomain>.*)", 
        RegexOptions.Compiled 
         | RegexOptions.IgnoreCase 
         | RegexOptions.Singleline); 

    protected void Application_BeginRequest(Object sender, EventArgs e) 
    { 
     string hostName = Request.Headers["x-forwarded-host"]; 
     hostName = string.IsNullOrEmpty(hostName) ? Request.Url.Host : hostName; 
     Match match = wwwRegex.Match(hostName); 
     if (match.Success) 
     { 
      string mainDomain = match.Groups["mainDomain"].Value; 
      var builder=new UriBuilder(Request.Url) 
          { 
           Host = mainDomain 
          }; 
      string redirectUrl = builder.Uri.ToString(); 
      Response.Clear(); 
      Response.StatusCode = 301; 
      Response.StatusDescription = "Moved Permanently"; 
      Response.AddHeader("Location", redirectUrl); 
      Response.End(); 
     } 
    } 
+0

me da: Nombre del grupo no válido: Los nombres de los grupos deben comience con un carácter de palabra –

+2

Esto ahora se ha hecho más fácil usando UrlRewrite que se puede agregar al sitio web.config. Solo quería mencionarlo aquí. http://stackoverflow.com/a/10193142 – gldraphael

+0

que es lo mejor para SEO con 'www' o sin' www' porque la [este] (http://stackoverflow.com/q/15951963/2218697) publicación dice? – stom

Cuestiones relacionadas