我可能在这里忽略了一些非常简单的事情,但我试图将所有错误的 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(例如 oldfile.php)的 URL 永远不会发送到 ASP.NET 进程进行路由。
有没有简单的解决方案/我忽略了什么?
编辑:这与这个问题有关,但是在没有 .mvc 的 IIS6 URL 下,不会发送 ASP.NET MVC 处理。