2012-05-20 13 views
8

Ich versuche URL-Redirect für die Website zu implementieren, anstatt es Seite für Seite zu tun. Ich möchte es in der Datei global.asax tun. Unten ist der Code, den ich definiert habe.301 Redirect in asp.net 4.0

Ich möchte http://website.net als meine Haupt-URL haben & möchte eine permanente URL-Umleitung haben, wenn jemand http://www.website.net eingibt.

Leider funktioniert es nicht für die Live-Website. Kann jemand auf das Problem im Code hinweisen? Der Code erzeugt keinen Fehler.

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 

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

} 

Antwort

13

Hauptproblem: Sie setzen die oben Sachen in Application_Start tun - die nur einmal ausgeführt wird. Sie sollten sich mit jeder Anfrage verbinden. Versuchen Sie folgendes:

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    // Code that runs on every request 

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

} 

Ein noch besserer Ansatz wäre, URL-Rewriting zu verwenden, die aus Web.Config konfiguriert werden können:

Microsoft rewriting module - Force www on url Or remove www from url

+0

Nicht funktioniert ng ... & es gibt keinen Fehler – Learning

+0

Oops Mein Fehler. Sollte bemerkt haben ... Ich plane, URL-Routing statt Neuschreiben zu implementieren, und ich hatte Probleme mit dem Neuschreiben aufgrund der Struktur und nein. der Abfragezeichenfolge in bestimmten Seiten. Schätze deine Antwort. Vielen Dank – Learning

5

Version 4 von .NET hat tatsächlich eine verbesserte Funktion für einzelne Seitenimplementierung - die redirectpermanent.

Response.RedirectPermanent(NEW_URL);

8

Wenn IIS 7 oder höher verwenden, ist die einfachste Lösung, um die httpRedirect Element in Ihrer web.config zu verwenden.

<httpRedirect enabled="true" exactDestination="true" httpResponseStatus="Permanent"> 
    <add wildcard="/MyOldAspFile.aspx" destination="/MyNewFile.aspx" /> 
    <add wildcard="/MyOldHtmlFile.html" destination="/MyNewFile.aspx" /> 
</httpRedirect> 

Diese Methode ist sehr leistungsfähig ist, zum Beispiel, wenn Sie die Domain geändert haben, aber die Seiten sind die gleichen, die Sie gerade hinzufügen:

<system.webServer> 
    <httpRedirect enabled="true" childOnly="true" destination="http://www.mynewdomain.com/" /> 
</system.webServer> 

ich hier einen kleinen Artikel geschrieben: ASP.NET 301 permanent redirects: the best solution

3

Aufbauend auf vorherige korrekte und hilfreiche Antworten, hier sind ein paar spezifische Beispiele. Vorausgesetzt, Sie möchten die alte Seite löschen (wie ich es getan habe), gibt es ein paar Optionen.

OPTION 1: Ändern der Global.asax

void Application_BeginRequest(object sender, EventArgs e) 
    { 
     // Add permanent redirection for retired pages 
     if (Request.Url.LocalPath.ToLower().StartsWith("/[OLD PAGE NAME]")) 
     { 
      Response.RedirectPermanent("/[NEW PAGE NAME]", false); 
     } 
    } 

OPTION 2: Ändern der web.config

<system.webServer> 
    <httpRedirect enabled="true" httpResponseStatus="Permanent"> 
     <add wildcard="/[OLD PAGE NAME]" destination="/[NEW PAGE NAME]" /> 
    </httpRedirect> 
</system.webServer>  
0

, wenn Sie nicht wissen, was Anwendung Domain-Name ist, Verwenden Sie so etwas

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority).Contains("localhost"))return; 
    var leftPartOfUrl = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority).ToLower(); 
    if (leftPartOfUrl.StartsWith("http") && leftPartOfUrl.Split('.').Length == 1) 
    { 
     var fullUrl = HttpContext.Current.Request.Url.ToString(); 
     HttpContext.Current.Response.Status = "301 Moved Permanently"; 
     HttpContext.Current.Response.AddHeader("Location", fullUrl.Insert(fullUrl.IndexOf("://", StringComparison.Ordinal) + 3, "www.")); 
    } 

}