我用一个新的ASP.NET MVC网站替换了一个旧的PHP网站。旧页面地址不再有效。我希望每个301(永久移动)重定向到特定的新地址。
但是,IIS 7似乎在访问我的应用程序之前拦截了许多此类请求。我想处理Global.asax文件的Application_Error()方法中的错误日志记录和重定向,而不是让IIS提供通用错误页面。
如何修改IIS以允许此操作?
答案 0 :(得分:1)
我认为MVC并不认为这是一个错误(即没有异常),而是它根本不匹配任何路由,因此让IIS像往常一样处理404。要在代码中处理这个问题,我会在路由列表的末尾添加一个通配符路由。
... Global.asax.vb
routes.MapRoute( _
"FileNotFound", _
"{*key}", _
New With {.controller = "FileNotFound", _
.action = "Http404"} _
)
... FileNotFoundController.vb
Function Http404(ByVal key As String) As ActionResult
Dim RedirectId As Guid
Select Case key
Case "someold/path/andfile.php"
RedirectId = New Guid("68215c26-0abe-4789-968e-0187683409b6")
Case Else
RedirectId = Guid.Empty
End Select
If Not RedirectId = Guid.Empty Then
Response.StatusCode = Net.HttpStatusCode.MovedPermanently
Response.RedirectLocation = Url.RouteUrl("SomeOtherRoute", New With {.id = RedirectId})
Else
Throw New Exception("Unable to resolve route.")
End If
Return Nothing
End Function
这将让您查看目标网址,并决定将其重定向到哪个目标网址。
或者,您可以实现自定义404处理程序页面并直接在IIS中进行设置。在该页面/控制器的代码中,您可以查看预期的URL并重定向为必要的。