我有一个用传统的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指引我朝着正确的方向发展。