2010-02-01 2 views
9

Wir haben eine Website unter domain.com, die auch über einen CNAME-Eintrag für www.domain.com zugänglich ist, der auf domain.com verweist. Wir möchten, dass alle Besucher von www.domain.com mit einer 301-Weiterleitung zu domain.com weitergeleitet werden. Was ist der beste Weg, dies in asp.net mvc zu implementieren? In global.asax?Asp.net mvc 301 Weiterleitung von www.domain.com zu domain.com

+4

Der einfachste Weg ist, eine andere Webseite in IIS erstellen, um die Umleitung zu behandeln. Sie müssten nicht programmieren - die IIS-Umleitung könnte damit automatisch umgehen. –

+1

In der Tat. IIS ist der Weg zu gehen. Sie wollen Ihre Anwendung nicht wirklich mit dieser Art von Sache verknüpfen, wenn IIS es kostenlos macht. IIS7 ist hier die beste Wahl. –

+1

Das Problem hier ist, dass die Website in einer Farm sitzt hinter einem Lastenausgleich, über den wir wenig Kontrolle haben. Der Host wird auf die interne IP-Adresse des Servers aufgelöst, und der ursprüngliche Hostname wird in einem Header "x-forwarded-host" neu verpackt. Soweit ich sehen kann, schließt dies die Verwendung der IIS7 HTTP Redirect-Funktion aus. – spender

Antwort

22

Ich akzeptiere, dass dies auf Anwendungsebene ist nicht wünschenswert, wie die Kommentare zu der Frage.

Die HTTP-Redirect-Funktion in IIS7 ist der beste Weg, dies zu tun.

In unserem Fall zwingen uns andere Einschränkungen dazu, dies auf Anwendungsebene zu tun. Hier

ist der Code, den wir in global.asax verwenden, um die Umleitung auszuführen:

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

gibt mir: Ungültige Gruppenname: Gruppennamen müssen Beginnen Sie mit einem Wortzeichen –

+2

Dies wurde jetzt mit Hilfe von UrlRewrite einfacher gemacht, das der web.config der Site hinzugefügt werden kann. Ich wollte es nur hier erwähnen. http://StackOverflow.com/A/10193142 – gldraphael

+0

welches ist am besten für SEO mit 'www' oder ohne' www' weil [dies] (http://StackOverflow.com/q/15951963/2218697) Post sagt mit? – stom

Verwandte Themen