ここで非常に単純なことを見落としている可能性がありますが、条件に基づいて 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 処理のために送信されません。