如何防止 IIS 默认站点 web.config 文件被虚拟目录继承?

Posted

技术标签:

【中文标题】如何防止 IIS 默认站点 web.config 文件被虚拟目录继承?【英文标题】:How do you prevent the IIS default site web.config file being inherited by virtual directories? 【发布时间】:2010-09-07 10:56:19 【问题描述】:

我在默认 IIS 站点的 web.config 文件中有以下代码。

<httpModules>
    <add type="MDL.BexWebControls.Charts.ChartStreamHandler,Charts" name="ChartStreamHandler"/>
</httpModules>

然后当我设置并浏览到一个虚拟目录时,我得到了这个错误

无法加载文件或程序集“图表”或其依赖项之一。系统找不到指定的文件。

虚拟目录从默认的 web.config 继承模块。

如何阻止这种继承?

【问题讨论】:

【参考方案1】:

我找到了答案。将 HttpModule 部分包裹在位置标签中,并将 inheritInChildApplications 属性设置为 false。

<location path="." inheritInChildApplications="false">
  <system.web>
    <httpModules>
      <add type="MDL.BexWebControls.Charts.ChartStreamHandler,Charts" name="ChartStreamHandler"/>
    </httpModules>
  </system.web>
</location>

现在任何虚拟目录都不会继承此位置部分中的设置。

@GateKiller 这不是另一个网站,它是一个虚拟目录,因此确实会发生继承。

@petrich 我使用&lt;remove /&gt; 获得了成功和失败的结果。我必须记住将它添加到每个虚拟目录中,这很痛苦。

【讨论】:

是的,我也觉得这很痛苦。感谢您提供有关 inheritInChildApplications 的提示。【参考方案2】:

According to Microsoft,其他网站不继承默认网站的设置。您的意思是您正在编辑与 machine.config 位于同一文件夹中的默认 web.config?

【讨论】:

我认为提问者正在谈论从它继承的站点的虚拟目录。【参考方案3】:

将以下内容添加到虚拟目录的 web.config 文件中:

<httpModules>
    <remove name="ChartStreamHandler"/>
</httpModules>

【讨论】:

以上是关于如何防止 IIS 默认站点 web.config 文件被虚拟目录继承?的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess转为web.config的操作技巧 apache伪静态转为iis伪静态

IIS设置发布公告页面

什么是 asp.net web.config 中的模拟?

IIS 之 IIS 7及以上多域名或端口绑定同一物理目录并设置不同默认文档

如何防止 XML 注入

跨域学习笔记3--web.config设置之system.webServer 详细介绍,为网站设置默认文档