ページごとに行うのではなく、WebサイトにURLリダイレクトを実装しようとしています。 global.asaxファイルで実行したいと思います。以下は私が定義したコードです。
http://website.net をメインURLとして使用し、誰かが入力した場合に永続的なURLリダイレクトを使用したい http://www.website.net 。
残念ながら、ライブWebサイトでは機能していません。誰かがコードの問題を指摘できますか?コードはエラーを生成しません。
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"));
}
}
主な問題:上記のことをApplication_Start
で実行しています。これは1回だけ実行されます。各リクエストに接続する必要があります。これを試して:
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"));
}
}
さらに良いアプローチは、Web.Config
内から構成できるURL書き換えを使用することです。
IIS 7以上を使用する場合、最も簡単な解決策は、web.configのhttpRedirect要素を使用することです。
<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永続的なリダイレクト:最良の解決策
.NETのバージョン4には、実際にはシングルページ実装の機能が改善されています redirectpermanent 。
Response.RedirectPermanent(NEW_URL);
以前の正解と役立つ回答に基づいて、ここにいくつかの具体的な例を示します。 (私が行ったように)古いページを削除したい場合は、いくつかのオプションがあります。
オプション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>
アプリケーションのドメイン名がわからない場合は、次のようなものを使用してください
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();
}
}