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>