我有一个用传统 ASP 编写的自定义 404 页面,已经运行了好几年。突然,我们看到的不是预期的 404,而是 500 内部服务器错误。
IIS 配置中没有任何改变(无论如何不是故意的)。
这是否只是 IIS 出了问题,用完了某些东西?重启可以解决问题吗?或者这是更严重问题的征兆?
Windows 2008 R2 上的 IIS 7.5。
在 Nathan C 的鼓动下,我远程桌面登录到服务器并在本地运行此程序,并得到了更详细的错误响应。顺便说一句,最重要的提示是:没想到本地也能得到不同的结果!
这似乎是说配置有问题。
我有两个自定义错误页面,一个用于 404,一个用于 410。
410 工作正常。
详细的错误响应似乎在某种程度上混淆了这两者:
Cannot add duplicate collection entry of type 'error' with combined key
attributes 'statusCode, subStatusCode' respectively set to 410,-1.
我查看了 web.config,错误部分包含:
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="410" path="/custom410.asp" responseMode="ExecuteURL" />
<error statusCode="404" path="/custom404.asp" responseMode="ExecuteURL" />
</httpErrors>
我突然意识到这个页面有问题。它两次提到 404 错误,但只提到一次 410 错误;要么是多出了什么问题,要么是缺少了什么。
但我不确定情况如何意味着看。
答案1
正如您所注意到的,IIS 7 对其配置文件非常挑剔。要修复此问题,请httpErrors
从 web.config 中删除整个部分,重新加载 IIS,然后使用 IIS 管理器中的“错误页面”选项添加所需内容。
答案2
似乎已经奏效的是:
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="410" subStatusCode="-1" />
<error statusCode="404" path="/custom404.asp"
responseMode="ExecuteURL" />
<error statusCode="410" path="/custom410.asp"
responseMode="ExecuteURL" />
</httpErrors>
..这意味着它从更高层次继承了某些行为(尽管我很难看出在哪里)。
从这个意义上说,这有点像蛮力方法,因为我仍然不完全确定它一开始就失败的原因。可能是它继承了愚蠢的行为默认设置(这是微软;他们有以前的)。
感谢 Servwise 的 Sam Morgan 为我指明正确的方向。