IIS6通配符映射会中断.net自定义错误

时间:2010-03-02 10:11:40

标签: c# .net asp.net iis url-rewriting

我们在.net网站上使用自定义urlrewiter,并设置通配符映射,将任何请求重定向到.net isapi过滤器进行处理。

这很好但我们注意到我们的自定义404页面无法正常工作的问题,而iis正在处理404。我们在web.config中配置自定义错误,如下所示

<customErrors mode="On">
  <error statusCode="404" redirect="/404.aspx"/>
  <error statusCode="500" redirect="/500.htm"/>
</customErrors>

我注意到,如果我请求带有aspx扩展名的页面(www.mysite.com/madeuppage.aspx)但不是无效目录(www.mysite.com/madeupdirectory/),则会提供自定义错误。我想这是因为IIS正在将aspx页面传递给.NET enginbe进行处理,但我认为通配符映射也会通过directorys吗?

我可以通过在IIS中配置自定义错误页面来解决这个问题,但是如果可能的话,我希望在web.cofig中配置它?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

IIS将404请求传递给模块,但只执行多个事件:

IIS_BeginRequest /qwe
IIS_AuthenticateRequest
IIS_AuthorizeRequest
IIS_ResolveRequestCache
IIS_PostResolveRequestCache
IIS_EndRequest/qwe

我是Helicon Ape(http://www.helicontech.com/ape)的开发人员之一。实际上,当我请求不存在的页面时,上面的事件是在Ape中执行的。 您可以尝试Ape,因为它具有URL重写和自定义错误解决方案。例如:

ErrorDocument 500 http://www.domain.com/cgi-bin/tester
ErrorDocument 404 /custom_error_page.htm
ErrorDocument 403 "Sorry, the access is forbidden"

如果相关,则语法基于文本且与Apache兼容。

答案 1 :(得分:0)

您的自定义网址重写器是一个HttpModule实现?我认为你的解决方案就在那里,但这取决于实现本身。 如果您处理任何请求,无论是.aspx还是.xxx或目录都无关紧要。

例如:在我们的一个产品中,我们使用了一个HttpModule Url Rerwriter,使用RegularExpressions来捕获路径或扩展或URI中的任何内容,以根据某些业务逻辑处理该请求。

也许你想要介于两者之间。我不全面了解你的问题