2012-05-20 90 views
8

Estoy tratando de implementar el redireccionamiento de URL para el sitio web en lugar de hacerlo página por página. Quiero hacerlo en el archivo global.asax. A continuación está el código que he definido.301 redirigir en asp.net 4.0

Quiero tener http://website.net como mi url principal & quiere tener una URL permanente redirigir si alguien escribe en http://www.website.net.

Desafortunadamente no funciona para el sitio web en vivo. ¿Alguien puede señalar el problema en el código? El código no genera ningún error.

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")); 
    } 

} 

Respuesta

13

problema principal: Tu eres haciendo las cosas más arriba en Application_Start - que sólo se ejecuta una vez. Debes conectarte con cada solicitud. Prueba esto:

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")); 
    } 

} 

Una mejor opción sería utilizar la reescritura de URL, que se puede configurar desde dentro Web.Config:

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

+0

No funciona ng ... y no da ningún error – Learning

+0

Vaya, error. Debería haber notado ... Estoy planeando implementar el enrutamiento url en lugar de reescribir y tuve problemas con la reescritura debido a la estructura y no. de query-string en ciertas páginas. Aprecia tu respuesta Gracias – Learning

5

La versión 4 de .NET en realidad tiene una función mejorada para una sola Implementación de página: redirectpermanent.

Response.RedirectPermanent(NEW_URL);

8

Si se utiliza IIS 7 o superior, la solución más sencilla es utilizar el elemento httpRedirect en su web.config.

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

Este método es muy potente, por ejemplo, si ha cambiado el dominio pero las páginas son los mismos, sólo tienes que añadir:

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

escribí un pequeño artículo aquí: ASP.NET 301 permanent redirects: the best solution

3

Sobre la base de respuestas correctas y útiles anteriores, aquí hay un par de ejemplos específicos. Suponiendo que desea eliminar la página anterior (como yo lo hice), hay un par de opciones.

OPCIÓN 1: Modificar el 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); 
     } 
    } 

OPCIÓN 2: Modificar el web.config

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

si no sabe cuál es el nombre de dominio de aplicación, use algo como esto

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.")); 
    } 

} 
Cuestiones relacionadas