asp.net redirect search-engine http-status-code-301

301 redirigir en asp.net 4.0



redirect search-engine (4)

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.

Quiero tener http://website.net como mi URL principal y quiero tener una redirección URL permanente 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")); } }


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

Response.RedirectPermanent(NEW_URL);


Problema principal: estás haciendo lo anterior en Application_Start , que solo 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")); } }

Un enfoque aún mejor sería usar la reescritura de URL, que se puede configurar desde Web.Config :

Módulo de reescritura de Microsoft - Forzar www en url O eliminar www de url


Si usa IIS 7 o superior, la solución más simple es usar 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 poderoso, por ejemplo, si ha cambiado el dominio pero las páginas son las mismas, solo tiene que agregar:

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

Escribí un pequeño artículo aquí: ASP.NET 301 redirecciones permanentes: la mejor solución


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 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>