すべてのリクエストをIIS6上のASP.NET MVCにリダイレクトします
-
03-07-2019 - |
質問
おそらくここで非常に単純なものを見落としているかもしれませんが、条件に基づいて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処理用に送信されていません。
解決
サーバーにデプロイしたときよりも、ASP.Netは呼び出されていません。
IISでワイルドカードマッピングを設定して、リクエストがASP.Netを使用してリクエストを処理するようにします。
IISマネージャーを開き、アプリを右クリックして、[プロパティ]、[ホームディレクトリ]タブの順に移動し、[構成]をクリックします。 [ワイルドカードアプリケーションマップ]の下で、[挿入](混乱せずにすぐ上にある)をクリックし、C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dllを“ Executable”に入力して、チェックを外します。ファイルが存在することを確認してください。
詳細については、 http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/