最近、古い php Web サイトを asp.net MVC Web サイトに置き換えました。検索エンジンのレガシー URL からの 404 エラーを防ぐために、http://www.mikesdotnetting.com/Article/108/Handling-Legacy-URLs-with-ASP.NET-MVCを介してカスタム レガシー ルート システムをセットアップします。
コードはローカル マシンで動作し、正しいルートにリダイレクトされます。ただし、ライブ サーバーは 404 を発行します。おまけの問題/手がかり、404 はカスタム 404 ページではなく、iis 6 の既定のページです。
コード:
public class LegacyUrlRoute: RouteBase
{
// source: http://www.mikesdotnetting.com/Article/108/Handling-Legacy-URLs-with-ASP.NET-MVC
public override RouteData GetRouteData(HttpContextBase httpContext)
{
const string status = "301 Moved Permanently";
var request = httpContext.Request;
var response = httpContext.Response;
var legacyUrl = request.Url.ToString();
var newUrl = "";
if (legacyUrl.Contains(".php"))
{
newUrl = "/";
if (legacyUrl.Contains("support/mailfilter.php"))
newUrl = "/support/";
else if (legacyUrl.Contains("/support/default.php"))
newUrl = "/support/";
else if (legacyUrl.Contains("/business/default.php"))
newUrl = "/services/";
else if (legacyUrl.Contains("/residential/default.php"))
newUrl = "/services/";
else if (legacyUrl.Contains("/about/default.php"))
newUrl = "/home/about/";
else if (legacyUrl.Contains("/jobs.php"))
newUrl = "/jobs/";
else if (legacyUrl.Contains("/support/links.php"))
newUrl = "/support/";
else if (legacyUrl.Contains("/support/settings.php"))
newUrl = "/support/";
else if (legacyUrl.Contains("/default.php"))
newUrl = "/";
response.Status = status;
response.RedirectLocation = newUrl;
response.End();
}
return null;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
return null;
}
}
ノート:
問題は iis が php ページを提供できないことにあると思われますが、問題を解決するための設定が iis に見つからないようです。リクエストがコントローラーのコード、エラーなどにヒットしないかのようです。他のすべてのページ/ルーティングは完全に機能しています。