Как 301 перенаправить в ASP.NET 4.0?
Я пытаюсь реализовать перенаправление URL для веб-сайта, а не делать это по страницам. Я хочу сделать это в файле global.asax. Ниже приведен код, который я определил.
Я хочу иметь http://website.net в качестве основного URL-адреса и хочу иметь постоянную переадресацию URL-адресов, если кто-то набирает информацию на http://www.website.net.
К сожалению, он не работает на веб-сайте. Может ли кто-нибудь указать на проблему в коде. Код не вызывает никаких ошибок.
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"));
}
}
Ответы
Ответ 1
Основная проблема: вы делаете вышеуказанный материал в Application_Start
который выполняется только один раз. Вы должны подключиться к каждому запросу. Попробуй это:
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"));
}
}
Еще лучший подход заключается в использовании перезаписи URL, которую можно настроить из Web.Config
:
Microsoft переписывающий модуль - Force www на url Или удалите www из url
Ответ 2
Если использовать IIS 7 или выше, самым простым решением является использование элемента httpRedirect в вашем web.config.
<httpRedirect enabled="true" exactDestination="true" httpResponseStatus="Permanent">
<add wildcard="/MyOldAspFile.aspx" destination="/MyNewFile.aspx" />
<add wildcard="/MyOldHtmlFile.html" destination="/MyNewFile.aspx" />
</httpRedirect>
Этот метод очень эффективен, например, если вы изменили домен, но страницы одинаковы, вам нужно просто добавить:
<system.webServer>
<httpRedirect enabled="true" childOnly="true" destination="http://www.mynewdomain.com/" />
</system.webServer>
Я написал небольшую статью здесь: постоянные переадресации ASP.NET 301: лучшее решение
Ответ 3
Версия 4.NET на самом деле имеет улучшенную функцию для реализации одной страницы - перенаправления.
Response.RedirectPermanent(NEW_URL);
Ответ 4
Основываясь на предыдущих правильных и полезных ответах, вот несколько конкретных примеров. Предполагая, что вы хотите удалить старую страницу (как и я), есть несколько вариантов.
ВАРИАНТ 1: Измените 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);
}
}
ВАРИАНТ 2: измените web.config
<system.webServer>
<httpRedirect enabled="true" httpResponseStatus="Permanent">
<add wildcard="/[OLD PAGE NAME]" destination="/[NEW PAGE NAME]" />
</httpRedirect>
</system.webServer>
Ответ 5
если вы не знали, что такое доменное имя приложения, используйте что-то вроде этого
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.StatusCode = 301;
HttpContext.Current.Response.AddHeader("Location", fullUrl.Insert(fullUrl.IndexOf("://", StringComparison.Ordinal) + 3, "www."));
HttpContext.Current.Response.End();
}
}