IIS子文件夹禁用身份验证:实现my_public目录匿名访问需求
解决匿名用户访问my_public文件夹的问题
很明显是根目录的web.config全局开启了身份验证(大概率是Forms认证),导致子文件夹默认继承了“拒绝匿名访问”的规则。要让my_public文件夹允许匿名用户直接访问里面的about.aspx,只需要在该文件夹的web.config里添加针对性的授权配置就行,具体操作如下:
1. 配置my_public文件夹的web.config
直接在my_public目录下的web.config中写入以下内容,覆盖根目录的授权规则:
<?xml version="1.0"?> <configuration> <!-- 适配经典ASP.NET管道模式 --> <system.web> <authorization> <!-- "?"代表匿名用户,这句是核心:允许匿名访问 --> <allow users="?" /> <!-- 可选:明确拒绝其他未授权用户,不过allow规则优先级更高,不加也不影响 --> <deny users="*" /> </authorization> </system.web> <!-- 适配IIS 7及以上的集成管道模式(必须加,否则配置可能不生效) --> <system.webServer> <security> <authorization> <add accessType="Allow" users="?" /> </authorization> </security> </system.webServer> </configuration>
2. 为什么这样配置能生效?
你的根目录web.config应该有类似这样的全局配置,它强制所有用户必须登录才能访问:
<system.web> <authentication mode="Forms"> <forms loginUrl="app/login.aspx" /> </authentication> <authorization> <!-- 全局拒绝匿名用户访问任何资源 --> <deny users="?" /> </authorization> </system.web>
子文件夹的web.config会默认继承根目录的配置,但我们通过<allow users="?" />直接覆盖了授权规则,给my_public文件夹开了“匿名访问”的特例。
3. 测试时的小提示
- 先清除浏览器的缓存和Cookie,避免之前的登录状态干扰测试结果;
- 确认IIS应用程序池的模式:如果是集成模式,
system.webServer节点的配置必须存在;如果是经典模式,只需要system.web节点的配置就够; - 如果还是跳转登录页,检查根目录是否有
<location>节点专门对my_public做了限制,这种情况下需要修改对应的location配置。
内容的提问来源于stack exchange,提问作者Łukasz Walkowiak




