【问题标题】:httpModule for 404404 的 httpModule
【发布时间】:2011-04-18 20:35:28
【问题描述】:

我创建了一个 httpModule 来处理 URL 重新映射,它在我的测试系统上运行良好。对www.mydomain.com/Some_Fancy_URL 的请求被重写为www.mydomain.com/some.aspx?fancy=23 等等。

当我部署到实际网站时,我得到的是默认的 IIS 404 页面。

在网上做了一些研究之后,似乎我需要在 IIS 6 中设置“通配符映射”以使请求通过 IIS 并进入我的 httpModule。问题是该站点托管在共享服务器上,因此可能无法让 ISP 进行更改。

我的问题是,我不能使用 httpHandler 告诉 IIS 我希望如何处理这些请求吗?例如:

<httpHandlers>
  <add path="*.aspx" verb="GET,POST" type="System.Web.UI.PageHandlerFactory" validate="false"/>
</httpHandlers>

似乎将它添加到我的 Web.Config 应该告诉 IIS 停止验证 .aspx 文件的存在,并且只需将请求传递给我处理。但它不起作用。

有什么建议吗?

【问题讨论】:

    标签: asp.net iis http-status-code-404 httpmodule


    【解决方案1】:

    IIS 6 和 ASP.NET 的问题在于它们没有集成。 IIS 需要通过脚本映射(.aspx、.asmx、通配符等)了解 ASP.NET。

    您的web.config 配置设置都不会影响 IIS,因为web.config 用于配置 ASP.NET 的行为,而不是 IIS。 IIS 不知道web.config

    除非您可以将请求交给 ASP.NET 管道(通过脚本映射),否则不会发生任何事情,并且您的所有 web.config 设置都将被忽略。

    对于 IIS 7,情况完全不同。在 IIS7 中,ASP.NET 和 IIS 紧密集成并共享同一管道,从而使您能够实现您想要的结果。

    另一种方法可能是查明您的托管商是否在其服务器上运行 URL 重写器,例如 ISAPI_Rewrite。这样您就可以重写 url,而无需将通配符 scriptmap 映射到 IIS6。

    【讨论】:

      【解决方案2】:

      通过反复试验以及更多的网络搜索,我找到了解决方案。它基本上与 Kev 的答案相似。

      除非请求具有已知的文件扩展名(.aspx、.ascx 等),否则 IIS 不会将请求视为 .NET。当我发送www.mydomain.com/anything 之类的内容时,它会查找名为“anything”的文件或文件夹,当找不到时,它会直接转到默认的 IIS 404 处理程序。

      那是我接手的地方。我将 IIS 6 更改为将 404 问题转发到 /404.aspx。然后,我使用与我的网站相同样式的通用“找不到您的文件”消息创建了该页面。

      这是好的部分: 现在 IIS 正在向 .NET 页面发送 404,我创建的自定义 httpModule 被触发了。该请求是针对 404.aspx,但 IIS 也可以很好地附加原始 URL。你会得到类似的东西:

      www.mydomain.com/404.aspx?404;http://www.mydomain.com/anything
      

      这允许我在 httpModule 中解析请求,并根据需要重写!

      【讨论】:

        猜你喜欢
        • 2010-10-23
        • 1970-01-01
        • 2012-01-19
        • 1970-01-01
        • 1970-01-01
        • 2010-11-23
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        相关资源
        最近更新 更多