2

ここで非常に単純なことを見落としている可能性がありますが、条件に基づいて URL をフィルタリングするアクションにすべての悪い URL をリダイレクトしてから、適切なページに 301 リダイレクトするか、404 ページを発行しようとしています。

この目的のために、ルートテーブルの最後に次のようなルートがあります。

routes.MapRoute("Error", "{*url}", new { controller = "Main", action = "Error" }); 

そして、次のようなアクション:

public ActionResult Error(string url)
{
        if (/* Conditions are met... */)
        {
            Response.Status = "301 Moved Permanently";
            Response.AddHeader("Location", /* Destination URL */);
            Response.End();
        }

        Response.StatusCode = 404;
        return View(/* 404 page... */));
}

これはローカルで完全に機能します。

ただし、IIS6 に展開された場合、.mvc を含まない URL (例: oldfile.php) は、ルーティングのために ASP.NET プロセスに送信されることはありません。

簡単な解決策はありますか / 私は何かを見落としていますか?

編集:これはこの質問に関連していますが、IIS6 では .mvc のない URL は ASP.NET MVC 処理のために送信されません。

4

1 に答える 1

7

多くの場合、サーバーにデプロイしたとき、ASP.Net は呼び出されていません。

IIS でワイルドカード マッピングをセットアップして、リクエストが ASP.Net を使用してリクエストを処理するようにします。

IIS マネージャーを開き、アプリを右クリックして、[プロパティ]、[ホーム ディレクトリ] タブの順に移動し、[構成] をクリックします。[ワイルドカード アプリケーション マップ] の下で、[挿入] をクリックします ([追加] ではなく、紛らわしいことにすぐ上にあります)。次に、「実行可能ファイル」に「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll」と入力し、[ファイルが存在することを確認する] のチェックを外します。

詳細については、この問題の解決に役立ったソースを参照してください: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

于 2008-10-20T06:06:17.507 に答える