什么会导致自定义 404 页面突然停止工作并显示 500?

什么会导致自定义 404 页面突然停止工作并显示 500?

我有一个用传统 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 为我指明正确的方向。

相关内容