IIS 设置 HTTP 自动跳转 HTTPS
复核日期:2026-10-16。先确保 HTTPS 绑定和证书已经可用,再启用跳转;否则会把所有访问重定向到一个无法打开的地址。
配置前检查
- IIS 站点已经绑定正确的 80 和 443 端口。
- 443 绑定使用与域名匹配、未过期且证书链完整的证书。
- 已安装 Microsoft IIS URL Rewrite 2.0,并备份当前
web.config。 - 如果前面还有 CDN、WAF 或反向代理,确认它传递
X-Forwarded-Proto,避免重定向循环。
官方说明:Microsoft URL Rewrite Module
推荐的 web.config 规则
将以下规则放在站点根目录 web.config 的 system.webServer 中。已有 <rewrite> 节点时只合并 <rule>,不要复制两个 <rewrite> 节点。
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect HTTP to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="^OFF$" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
redirectType="Permanent" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
初次上线可以先把 redirectType 改为 Found(302)验证,确认无误后再改为 Permanent(301),避免浏览器长时间缓存错误规则。
IIS 管理器图形界面
- 选择目标站点,确认“绑定”中同时存在 HTTP 与 HTTPS。
- 打开“URL 重写”,添加“空白规则”。
- 匹配 URL 使用
(.*);条件使用{HTTPS}匹配^OFF$。 - 操作选择“重定向”,目标为
https://{HTTP_HOST}/{R:1},并保留查询字符串。
原有界面参考图:
验证
curl.exe -I http://example.com/test?a=1
curl.exe -I https://example.com/test?a=1
第一个请求应返回 301/302 且 Location 保留路径和参数;第二个请求应正常返回,不能再次循环跳转。再检查证书域名、到期日及不同浏览器访问结果。
常见问题与回滚
- 无限跳转:代理终止了 TLS,但 IIS 看到的仍是 HTTP。应按代理架构识别可信的转发协议,不能简单叠加规则。
- 子应用异常:确认规则位于正确层级,必要时隔离子应用继承。
- 内网健康检查失败:为明确的健康检查路径增加排除条件,避免全局绕过 HTTPS。
- 回滚:恢复备份的
web.config,回收应用池并重新测试 HTTP/HTTPS。不要在未确认影响范围时直接删除整个配置文件。
HSTS 应在 HTTPS 全站稳定后再启用;包含子域名前要确认所有子域都支持 HTTPS。


