【问题标题】:Why setting customErrors in web.config doesn't work at this case?为什么在这种情况下在 web.config 中设置 customErrors 不起作用?
【发布时间】:2011-05-28 03:14:44
【问题描述】:

在共享主机提供商中发布的 ASP.NET 3.5 网站中,我已将 web.config 文件配置为:

    <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="AccessDenied.htm"/>
        <error statusCode="404" redirect="FileNotFound.htm"/>
    </customErrors>

如果用户请求的页面不存在(例如“www.example.com/NotExistPage.aspx”),用户将按照我们的预期被重定向到 FileNotFound.htm 页面。

但如果用户请求一些地址,例如:“www.example.com/NotExistDirectory”,没有.aspx 扩展名,用户将遇到 IIS 7.5 错误页面:

HTTP 错误 404.0 - 未找到 您正在寻找的资源是 已删除、已更改名称或已 暂时不可用。

详细的错误信息:

Module  IIS Web Core
Notification    MapRequestHandler
Handler StaticFile
Error Code  0x80070002

Requested URL   http://www.example.com:80/NotExistDirectory
Physical Path   D:\Websites\example\example.com\wwwroot\NotExistDirectory
Logon Method    Anonymous
Logon User  Anonymous

这是一个不友好的黄页,我们没想到。

我想知道在 webconfig 中设置 customeError 是否不支持这种类型的地址?我怎样才能防止用户看到这个黄页。

编辑: 感谢大卫的回答,但我找到了实际原因和正确的解决方案。请看我的回答。

【问题讨论】:

    标签: asp.net web-config iis-7.5 custom-errors


    【解决方案1】:

    这很有趣,几年后我突然弄清楚是什么问题。

    感谢@David的解决方案,但原因和完整的解决方案如下:

    通过将customErrors 模式设置为“On”,它仅在我们在 ASP.NET 应用程序中遇到异常时才有效,而当我们尝试访问 nonExistingdirectorynotExsitingStaticResouce 时,IIS 会呈现 404 错误并且确实如此不能直接访问asp.net运行时和IIS服务器。

    所以我们需要在 Web.config 中为 IIS 添加如下配置:

      <system.webServer>
        <httpErrors errorMode="Custom">
          <remove statusCode="404"/>
          <error statusCode="404" path="~/404.html" responseMode="File" />
        </httpErrors>
      <system.webServer>
    

    responseMode 设置为“File”很重要,否则状态码会自动从 404 更改为 200 。所以从客户端的角度来看,他们没有得到实际的 404 状态码。

    【讨论】:

      【解决方案2】:

      首先,目录 url 必须带有斜杠,否则它只是一个无扩展名的文件。 www.mysite.com/NotExistDirectory/
      其次,ASP.net IIS 模块只是 ASP MIME 类型的处理程序,所以目录是留给 Web 服务器的。 三、customerror 是 system.web 的一部分,是 ASP.net 配置的一部分
      httperror 是 system 的一部分。webserver 是 IIS 配置的一部分。
      假设 IIS 配置中的 http 模块默认值 httperror 将适用于不存在目录的自定义错误。

      【讨论】:

        【解决方案3】:

        @Mostafa:我遇到了完全相同的问题。我发现可以通过在 web.config 文件中添加以下内容来解决:

        <system.webServer>
            <httpErrors errorMode="Custom">
              <remove statusCode="404" subStatusCode="-1" />
              <error statusCode="404" subStatusCode="-1" prefixLanguageFilePath="" path="/MyErrorPage.aspx" responseMode="ExecuteURL" />
            </httpErrors>
          </system.webServer>
        

        【讨论】:

        • 谢谢,这对我有用,我错过了 errorMode="Custom"
        • 对于新读者,我终于找到了真正的原因和完整的解决方案,你可以看看我的回答
        • 不起作用,我得到这个 xxx.com 页面无法找到 找不到该网址的网页:https://xxx.com/aaaaa HTTP ERROR 404
        【解决方案4】:

        对于 .aspx 以外的任何其他文件,您可以在 IIS 中进行配置: http://www.xefteri.com/articles/show.cfm?id=11

        【讨论】:

        • 链接已失效。另外,请详细说明您的答案,不要只发布链接。
        【解决方案5】:

        这是因为 ASP.Net 模块被配置为处理某些文件扩展名。 IIS 确定 .aspx 必须由 ASP.Net 模块处理,然后 web.config 中的 customerrors 部分(实际上是 web.config 本身)启动。

        由于您请求的页面甚至没有为 ASP.Net 配置,IIS 会自行处理它而不传递请求。

        【讨论】:

        猜你喜欢
        • 2017-11-26
        • 2010-12-29
        • 1970-01-01
        • 2021-08-05
        • 2011-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多