【问题标题】:IIS6 Wildcard mapping breaks .net custom errorsIIS6 通配符映射中断 .net 自定义错误
【发布时间】:2010-03-05 19:38:56
【问题描述】:

我们在 .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 引擎进行处理,但我认为通配符映射也会传递目录?

这可以通过我在 IIS 中配置自定义错误页面来解决,但如果可能的话,我宁愿在 web.cofig 中进行配置?有什么想法吗?

【问题讨论】:

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


    【解决方案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 兼容。

    【讨论】:

    • 好吧,我来看看猿,但我想如果我们仍然使用我们自己的重写器,你在这里说的是让我的自定义 url 重写器来处理自定义错误页面,而不是搁置它到 .NET 引擎?
    • 抱歉耽搁了。您可以使用您的自定义模块来处理这些响应。虽然这取决于模块的实现,但我相信这是可能的。如果 Ape 能做到,你的模块也能做到。
    【解决方案2】:

    您的自定义 url Rewriter 是 HttpModule 实现?我认为您的解决方案在那里,但这取决于实现本身。 如果您处理任何请求,无论是 .aspx、.xxx 还是目录都没有关系。

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

    也许你想要介于两者之间的东西。我在全球范围内无法理解您的问题

    【讨论】:

    • 问题是 .NET 引擎甚至没有得到要处理的请求。 IIS 处理请求并返回它自己的 404,而不将请求传递给 .NET。我不确定为什么全局通配符会为重写器处理这个问题?
    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 2022-08-15
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2013-06-18
    • 2011-03-05
    相关资源
    最近更新 更多