301 Permanent Redirect означает, что ресурс навсегда перемещен на новый URI. Стандартный Response.Redirect() возвращает статус код 302 и означает временное перемещение ресурса, и соответственно принимается поисковыми системами как временное решение.
Так что же нужно для создания постоянного редиректа? Приведу пример кода из global.asax, который осуществляет редирект всех запросов к сайту без префикса www на тот же самый урл с необходимым префиксом:
protected void Application_BeginRequest(object sender, EventArgs e) {
var host = Request.Url.Host;
if (host.Equals("progblog.ru", StringComparison.OrdinalIgnoreCase)) {
var newUrl = new UriBuilder(Request.Url);
newUrl.Host = "www." + host;
Response.StatusCode = 301;
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", newUrl.Uri.AbsoluteUri);
Response.End();
return;
}
}
Например при запросе http://progblog.ru/Posts/ASP-NET-301-Redirect сайт перенаправит запрос к http://www.progblog.ru/Posts/ASP-NET-301-Redirect. Что является полезным для поисковых машин.
В обзоре «ASP.NET 4.0 и Visual Studio 2010 Web Development Beta 1» обещается поддержка данного вида редиректа в следующем виде:
RedirectPermanent("/newpath/foroldcontent.aspx");
Приятного вам программирования :)