IIS 7.5 =嵌套的web.config不会覆盖应用程序级别web.config

时间:2016-03-08 15:10:36

标签: iis coldfusion

运行ColdFusion 11(更新7)和IIS 7.5

我的网站应用程序/根级别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状态代码时,服务器将返回自定义错误处理程序响应。我对文档的解释是,嵌套的web.config文件应该覆盖根web.config文件,但显然不是。

我已在IIS applicationhost文件中检查过,httpErrors的overrideModeDefault设置为true。我还尝试在我的根web.config文件中使用位置标记来执行相同的操作,但除非我将路径设置为通配符,否则它也会被忽略。

我没有想法。对你的帮助表示感谢。提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

特别是这段摘录:

  

安全注意事项

     

提醒:出于架构原因,如果URL位于同一个应用程序池中,则IIS只能执行该URL。使用重定向功能在不同的应用程序池中执行自定义错误。

     

当发生特定错误时,IIS还可以向浏览器返回302重定向。如果您有服务器场,则重定向很好。例如,您可以将所有错误重定向到您密切监控的中心位置。

     

但是存在风险:responseMode="File"(这是默认值)允许您指定磁盘上的每个文件。如果你非常注重安全,这将无效。

     

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

     

允许委派httpErrors部分:

     

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

     

其次,转到applicationHost.config中的部分并进行更改,以便只委派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属性是一个可选属性,用于定义节的锁定状态。其可用值为Allow或Deny。默认值为&#34;允许&#34;。与服务器的任何性能,安全性或关键方面相关的所有IIS部分都被锁定,此属性设置为&#34;拒绝&#34;。如果overrideModeDefault属性设置为&#34;拒绝&#34;,那么为特定配置部分的属性设置值的较低级别的任何配置文件(即web.config文件)都无法生效,覆盖全局值。这会导致锁定违规并发生错误。