【问题标题】:ASP.net web.config doesn't catch all 404'sASP.net web.config 没有捕获所有 404
【发布时间】:2011-09-27 00:46:16
【问题描述】:

在我的 web.config 我有:

    <customErrors mode="On" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite">
        <error statusCode="500" redirect="~/Error.aspx" />
        <error statusCode="404" redirect="~/404.aspx" />
    </customErrors>

然而,对于这些 URL,只有定义了文件扩展名的第二个有效,另一个返回蓝屏 404“应用程序中的服务器错误”。

http://127.0.0.1/scirranew/invalidpath

http://127.0.0.1/scirranew/invalidpath.aspx

有什么想法吗?我在 ASP.net 4、IIS 7.5 上。

【问题讨论】:

    标签: asp.net web-config http-status-code-404 custom-error-pages


    【解决方案1】:

    如果您想让它工作,您需要配置 IIS 以将所有请求传递给 .NET 引擎。您的第一个示例显然不是要求 .NET 页面,因此它没有路由到 .NET 引擎。

    您使用的是什么版本的 IIS 和 .NET? This 可能会有所帮助。

    【讨论】:

    • 在 .Net 4 中,虽然默认情况下所有请求都将通过 asp.net。
    • 汤姆,什么版本的 IIS?我认为 Jason 明白这也需要 IIS7 的集成管道。
    【解决方案2】:

    只有在 IIS 中注册的文件扩展名才会调用 ASP.Net。因此,当您转到invalidpath 时,IIS 会检查与该名称匹配的文件,然后是文件夹。如果两者都不存在,则调用 IIS 中指定的 404 页面。

    根据您的 IIS 版本,您有几个不同的选项。在 IIS6 中,您必须从 IIS 管理器中手动设置 404 页面。在 IIS7 和更高版本中,您可以使用 web.config 并更改 system.webServer 部分: http://www.iis.net/ConfigReference/system.webServer/httpErrors

    【讨论】:

      【解决方案3】:

      我在同一个 web.config 中有 2 个配置

      <system.web>
          <customErrors mode="On" defaultRedirect="/error.aspx" redirectMode="ResponseRedirect">
          </customErrors>
      </system.web>
      

      你也可以使用 customErrors mode="RemoteOnly"

      和

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

      看看 path="/404.aspx" 与 path="~/404.aspx" 或 path="404 的区别。 aspx"

      【讨论】:

        【解决方案4】:

        另外,如果可能的话,我建议使用纯 html 页面作为错误页面,因为它们更可靠。例如,如果 .net 会话存储不可用(例如会话数据库关闭),则错误页面将尝试无限期地重定向到错误页面! Html 页面对 .net 子系统的依赖较少,因此当事情开始失败时更有可能工作。

        【讨论】:

          猜你喜欢
          • 2013-12-21
          • 2018-01-27
          • 2018-08-30
          • 1970-01-01
          • 2016-02-11
          • 1970-01-01
          • 1970-01-01
          • 2013-12-27
          • 2015-12-31
          相关资源
          最近更新 更多