IIS httpErrors ExecuteURL 将奇怪的查询字符串(如 500;http://mysite.com/failed-page)附加到目标 URL

IIS httpErrors ExecuteURL 将奇怪的查询字符串(如 500;http://mysite.com/failed-page)附加到目标 URL

我注意到 IIS 错误页面的行为有些奇怪。我的设置如下:

<httpErrors errorMode="Custom" existingResponse="Replace">
 <remove statusCode="500" />
  <error statusCode="500" responseMode="ExecuteURL" path="/error-page" />
</httpErrors>

有时,由于查询字符串太长而发生 ASP.NET 错误,然后在尝试执行错误页面 URL 时立即发生第二个错误。我已将问题追溯到 IIS 将原始 URL 附加到错误页面 URL 的事实,如下所示:

Original: http://example.com/someurl?id=some_very_long_query_string_causing_security_exception
Error: /error-page?500;http://example.com/someurl?id=some_very_long_query_string_causing_security_exception

这是一个大问题。如果原始 URL 因查询字符串太长而失败,那么附加内容的错误页面也会失败,因为它的查询字符串甚至更长!

我认为这是 IIS 中最愚蠢的错误。有人知道是否有针对该错误的服务包补丁吗?最坏的情况是,如果到现在还没有修复任何问题,有没有办法禁用此行为或有什么技巧可以阻止 IIS 将未经请求的内容附加到错误页面?因为它破坏了整个自定义错误页面机制。

答案1

在路径末尾添加斜杠(例如 path="/error-page/")将停止附加错误代码和 URL,请注意,它将保留原始失败的 URL,例如

答案2

我很久以前就遇到过类似的问题,因此有问题的系统使用了静态错误页面。

您可以在 defaultResponseMode 中将其设置为将返回单个静态页面的文件。

httpErrors 元素 IIS 设置架构

这里也有类似的问题

相关内容