4

最近、古い 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 に見つからないようです。リクエストがコントローラーのコード、エラーなどにヒットしないかのようです。他のすべてのページ/ルーティングは完全に機能しています。

4

1 に答える 1

3

答えを見つけました。

この問題は、拡張子が .php の場合、iis が asp.net サービスを開始しないことが原因です。

解決策は、[プロパティ] > [ホーム ディレクトリ] > [構成] に移動し、.php 拡張子を見つけて、実行可能パスを asp.net パスに変更し、それを "GET、HEAD、POST、DEBUG" または任意のものに制限することです。最初は「すべての動詞」ラジオ ボタンを選択していましたが、機能しませんでした。

このページには私が思いついた答えが具体的にありませんでしたが、このページは役に立ちました.

于 2013-02-15T21:03:25.290 に答える