次のコードを使用して
context.Response.StatusCode = 301;
context.Response.Redirect(newUrl, true);
context.Response.End();
フィドラーで、301ではなく302を使用していることがわかります。リダイレクト呼び出しの後にステータスを設定する必要がありますか?
ASP.Net 4.0を使用している場合は、 Response.RedirectPermanent を使用できます。これにより、302ではなく301が使用されます。
Response.Redirect()は、StatusCodeプロパティをリダイレクトのコード(302)で上書きします。また、ブール型パラメーターを取得するResponse.Redirect()オーバーロードを使用しているため、自分でResponse.End()を呼び出す場合は、Falseに設定する必要があります。それ以外の場合は冗長であり、エラーを引き起こす可能性があります。
以下を試してください(ASP.NET 4.0以前。AdamButlerの回答は新しいベストプラクティスをカバーしています):
context.Response.Redirect(newUrl, false);
context.Response.StatusCode = 301;
context.Response.End();
301はキャッシュ可能です。 ASP.NET 4.0を使用している場合は、 RedirectPermanent を使用できます。
また、リダイレクト後にステータスコードを設定します
また、これらの答えを調べてください。 Response.Redirect HTTPステータスコード
同じサイトに複数のバージョンがないように、主にSEOの理由で、現在のサイトにリダイレクトするサイトの異なるバージョンの古いドメイン/サブドメインがある場合、上記の回答と使用するものを組み合わせています別のURL:
using System;
using System.Net;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
namespace myapp.web {
public class Global : HttpApplication {
void Application_Start(object sender, EventArgs e) {
// Code that runs on application startup
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected void Application_BeginRequest(object sender, EventArgs e) {
//some of these checks may be overkill
if ((HttpContext.Current != null)
&& (HttpContext.Current.Request != null)
&& (HttpContext.Current.Request.ServerVariables != null)
&& (!String.IsNullOrEmpty(HttpContext.Current.Request.ServerVariables["HTTP_Host"]))
) {
switch (HttpContext.Current.Request.ServerVariables["HTTP_Host"]) {
case "old.url.com":
HttpContext.Current.Response.RedirectPermanent("https://new.url.com", true);
//status code is not needed if redirect perm is used
HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.MovedPermanently;
HttpContext.Current.Response.End();
break;
case "nightly.old.url.com":
HttpContext.Current.Response.RedirectPermanent("https://nightly.new.url.com", true);
//status code is not needed if redirect perm is used
HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.MovedPermanently;
HttpContext.Current.Response.End();
break;
}
}
}
}
}