【问题标题】:Why does the ASP.NET error page return 404 as soon as the aspxerrorpath querystring is present?为什么 ASP.NET 错误页面一出现 aspxerrorpath 查询字符串就返回 404?
【发布时间】:2011-05-05 01:47:26
【问题描述】:

我已按如下方式配置了一个 ASP.NET 应用程序:

<customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx"/>

当我浏览到 ~/Error.aspx 文件时,服务器返回 200 并呈现页面。但是,如果用户被重定向到错误页面,则会在路径中附加一个查询字符串:

/Error.aspx?aspxerrorpath=/Test.aspx

但无论何时使用此查询字符串,服务器都不会呈现错误页面,而是使用服务器的自定义错误页面返回 404,而不是 Error.aspx

为什么 web.config 设置不导致 ~/Error.aspx 被渲染?

【问题讨论】:

  • 究竟附加了什么?生成的 URL 是什么?
  • @Oded 我用生成的 URL 编辑了问题,包括 ASP.NET 在出现错误时重定向用户时添加的查询字符串。在此示例中,Test.aspx 将是导致异常的页面,例如 DivideByZeroException。
  • 我也有同样的问题。它不会发生在我的本地计算机上的 IIS 5.1 上,但会发生在我的托管服务器上。其他查询字符串不会导致问题,并且 = 符号之后的内容无关紧要(可以完全空白)。事实上,你甚至可以输入不带等号的 aspxerrorpath,它会起作用。

标签: asp.net


【解决方案1】:

我相信我已经找到了问题所在。由于最近的 ASP.NET 安全漏洞 (see Scott Guthrie's post),建议的操作之一是放入 URLScan 规则,该规则禁止任何带有“aspxerrorpath=”查询字符串的 url。因此,您的 url 在到达 ASP.NET 之前就被切断了,并返回了默认的 404。

要检查这是否是您的问题,您可以“aspxerrorpath=xx”到您网站上的任何页面 url,它应该返回 404 错误。

现在已经发布了一个补丁来修复 asp.net 中的这个漏洞,您应该能够摆脱该规则,然后您的错误页面重定向应该会再次起作用。

【讨论】:

  • http://server/app/thisistest.aspx?aspxerrorpath= 仍然会导致错误。该错误在 Application_Error 中捕获,但未正确处理 == 未从自定义错误重定向到站点(在 web.config 中)。这适用于 ASP.NET 4.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
相关资源
最近更新 更多