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

我有一个用传统的ASP编写的自定义404页面,这个页面运行了好几年。 突然之间,他没有看到他预期好的404,而是看到一个500内部的服务器错误。

在IISconfiguration中没有任何改变(不是故意的,反正)。

这只是IIS发脾气,用完了什么? 可能重新启动修复它? 或者这是一个更严重的迹象?

Windows 2008 R2上的IIS 7.5。

在Nathan C的怂恿下,我已经远程桌面到服务器并在本地运行,我得到了更详细的错误响应。 顺便说一下,顶部提示:没有意识到你可以在本地获得不同的结果!

这似乎是说configuration有问题。

我有两个自定义错误页面,一个用于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只有一次; 有一些额外的或缺less的东西。

但我不知道它如何看待。

您已经注意到,IIS 7对其configuration文件非常挑剔。 要修复,请从web.config中删除整个httpErrors部分,重新​​加载IIS,然后使用IISpipe理器中的“错误页面”选项添加所需内容。

什么似乎已经做了这个诀窍是:

 <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> 

这意味着它从一个更高的层次上inheritance了一些行为(尽pipe如果我能看到它在哪里,我是该死的)。

从这个意义上讲,这是一种暴力方法,因为我还不完全确定它打破的原因。 这可能是它从一个愚蠢的默认设置inheritance行为(这是微软;他们有以前)。

感谢Servwise的Sam Morgan指引我朝着正确的方向发展。