web.config在IIS 10运行正常但IIS 8.5返回403错误如何解决
IIS 10.0 URL Rewrite配置迁移到IIS 8.5报403错误的排查解决方案
核心问题排查步骤
1. 修复handlers节点配置冲突
这是最可能的触发原因:
IIS 8.5和IIS 10.0对handlers节点的继承逻辑存在差异,你新配置里直接写<handlers accessPolicy="Read, Execute, Script" />会清空所有默认的handler映射(包括静态文件处理、ASP/ASP.NET处理等),同时还覆盖了原有正常运行的CGI-exe自定义配置,导致IIS找不到处理请求的程序,直接返回403。
修复方法:保留原有handler配置的同时修改accessPolicy,代码如下:
<handlers accessPolicy="Read, Execute, Script"> <remove name="CGI-exe" /> <add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="Either" requireAccess="Execute" allowPathInfo="true" /> </handlers>
同时注意要把原有配置里的defaultDocument节点也加回新的web.config,避免访问根目录找不到默认页报错。
2. 配置URL Rewrite允许的服务器变量
IIS 8.5的URL Rewrite 2.0默认禁止未在白名单中的服务器变量修改,你配置的所有RESPONSE_开头的响应头变量都需要先加入允许列表:
- 打开IIS管理器,进入对应站点的URL Rewrite功能
- 点击右侧操作栏的「查看服务器变量」
- 依次添加你用到的所有变量:
RESPONSE_Strict_Transport_Security、RESPONSE_SERVER、RESPONSE_X-POWERED-BY、RESPONSE_X-ASPNET-VERSION、RESPONSE_X-ASPNETMVC-VERSION、RESPONSE_Set_Cookie
未添加的情况下IIS会直接拦截请求返回403,这是IIS 8.5和10.0的默认规则差异。
3. 验证权限与SSL配置
- 先临时关闭HSTS规则测试:把HSTS规则的
enabled属性改为false,排除HTTPS跳转导致的错误,确认站点可以正常访问后再开启 - 检查IIS站点SSL设置:如果未配置有效证书,不要勾选「要求SSL」选项,否则HTTP请求会直接返回403
- 确认站点根目录的ACL权限:IUSR、IIS_IUSRS组需要拥有站点目录的读取、执行权限,不要继承上级目录的拒绝规则
4. 用日志定位精确错误
打开站点的IIS访问日志,查看403对应的子状态码,可以直接定位问题:
- 403.1:执行权限不足,对应handlers的accessPolicy配置错误
- 403.5:URL Rewrite规则拦截,对应服务器变量未允许或规则语法错误
- 403.7:SSL客户端证书要求,对应SSL设置里开启了客户端证书验证
内容的提问来源于stack exchange,提问作者Pedro Monteiro
相关产品推荐
相关产品推荐

