我需要禁用 IIS 服务器提供某些文件的功能,我偶然发现了请求过滤,但出于某种原因,我无法让它在每个站点上运行。我相信我的网站正在继承并被 applicationHost.config 中的全局 IIS 配置覆盖
我想在站点配置文件的 System.web 部分放置类似以下内容的内容。
<security>
<requestFiltering>
<fileExtensions>
<add fileExtension=".xml" allowed="false" />
</fileExtensions>
</requestFiltering>
</security>
但这似乎不起作用,您仍然可以访问 .xml 文件,尝试设置隐藏段也会产生同样的效果。
我做了一些研究,但无济于事,并对 IIS 的 applicationHost.config 做了一些更改
<section name="requestFiltering" overrideModeDefault="Allow" />
(这是针对 system.webServer 的正确部分组)”
我还运行了以下命令,它似乎只是从 applicationHost.config 中删除了所有设置,但仍然没有效果
C:\Windows\System32\inetsrv>appcmd.exe unlock config -section:system.webServer/security/requestFiltering
我遇到的所有答案似乎都集中于做相反的事情并启用 IIS 来提供静态文件服务,我想用一个似乎已经提供所有文件的服务器来做完全相反的事情。
答案1
因此经过大量搜索后,我最终创建了一个新网站来测试网络服务器上的问题,这帮助我找到了问题所在。
新网站没有表现出有问题的行为,通过比较 applicationHost.config 中的不同网站设置,我在 applicationPools 下找到了以下设置
<add name="WebsiteNameRemoved" autoStart="true" enableConfigurationOverride="false" managedPipelineMode="Integrated">
<processModel identityType="ApplicationPoolIdentity" />
</add>
解决方案是将 enableConfigurationOverride 设置为 true (默认情况下为 true,因此删除它也可以)
因此将其更改为以下内容将解决该问题
<add name="WebsiteNameRemoved" autoStart="true" enableConfigurationOverride="true" managedPipelineMode="Integrated">
<processModel identityType="ApplicationPoolIdentity" />
</add>