2016-03-08 45 views
2

运行ColdFusion 11(更新7)处理设置的自定义错误和IIS 7.5IIS 7.5 =嵌套的web.config将不会覆盖在应用程序级别的web.config

我的网站应用/根级别的web.config:

<configuration> 
    <system.webServer> 
     <httpErrors errorMode="Custom" /> 
    </system.webServer> 
</configuration> 

我嵌套的web.config文件,其中坐镇内线/ API/EB:

<configuration> 
    <system.webServer> 
     <httpErrors errorMode="Detailed" /> 
    </system.webServer> 
</configuration> 

当我访问网页/ API/EB子目录中,坐在(如401.cfm)和触发一个401状态代码服务器将r修改自定义错误处理程序响应。我从文档的解释是,嵌套的web.config文件应该覆盖根web.config文件,但它显然不是。

我已经检查了IIS应用程序主机文件,httpErrors overrideModeDefault设置为true。我也尝试在我的根web.config文件中使用位置标记来做同样的事情,但它也被忽略,除非我将路径设置为通配符。

我出来的想法。对你的帮助表示感谢。先谢谢你。

回答

0

我发现这篇文章,这似乎解释你的问题非常好 - How to Use HTTP Detailed Errors in IIS 7.0

具体来说此摘录:

安全考虑

注意的一点是:对于建筑的原因,IIS只有在位于同一应用程序池中的情况下才能执行该URL。使用重定向功能在不同的应用程序池中执行自定义错误。

当发生特定错误时,IIS也可以返回302重定向到浏览器。如果你有一个服务器场,重定向是很好的。例如,您可以将所有错误重定向到您密切监视的中央位置。

但有风险:responseMode="File"(这是默认值)允许您指定磁盘上的每个文件。如果你非常关注安全性,这将不起作用。

可行的方案可能只包括允许errorMode设置的委派。这使得开发人员即使在使用远程客户端时也可以接收其应用程序的详细错误。所有必要的是设置errorMode="Detailed"。下面是如何配置这样的情景:

允许httpErrors部分代表团:

<section name="httpErrors" overrideModeDefault="Allow" />

其次,转到applicationHost部分。配置和更改,这样只有errorMode委托:

<httpErrors lockAllAttributesExcept="errorMode" lockElements="error">
<error statusCode="404" prefixLanguageFilePath="E:\inetpub\custerr" path="404.htm" /> <error statusCode="401" prefixLanguageFilePath="E:\inetpub\custerr" path="401.htm" /> <error statusCode="403" prefixLanguageFilePath="E:\inetpub\custerr" path="403.htm" /> <error statusCode="405" prefixLanguageFilePath="E:\inetpub\custerr" path="405.htm" /> <error statusCode="406" prefixLanguageFilePath="E:\inetpub\custerr" path="406.htm" /> <error statusCode="412" prefixLanguageFilePath="E:\inetpub\custerr" path="412.htm" /> <error statusCode="500" prefixLanguageFilePath="E:\inetpub\custerr" path="500.htm" /> <error statusCode="501" prefixLanguageFilePath="E:\inetpub\custerr" path="501.htm" /> <error statusCode="502" prefixLanguageFilePath="E:\inetpub\custerr" path="502.htm" />

</httpErrors>

请注意,overrideModeDefault属性的正确值是Allow,而不是您在问题中提到的true

本文进一步解释了overrideModeDefault属性 - Understanding IIS 7.0 Configuration Delegation

摘录:

的overrideModeDefault属性是一个可选的属性,它定义一个区段的锁定状态。其可用值是“允许”或“拒绝”。默认值是“允许”。与服务器的任何性能,安全性或关键方面相关的所有IIS部分都被锁定,该属性被设置为“拒绝”。如果overrideModeDefault属性设置为“Deny”,那么为较低级别(即web.config文件)设置特定配置节的属性值的任何配置文件都无法生效并覆盖全局值。这会导致违反锁并发生错误。

+0

在双重检查我可以看到,我确实设置了overrideModeDefault以允许 – BallisticPugh

相关问题