IIS:使用相对URL时Url Redirect无法正常工作的问题求助
IIS HTTP转HTTPS重定向问题解决方案
问题根因
你勾选「SSL必填」选项后,IIS会在URL Rewrite规则执行之前直接拦截所有未加密的HTTP请求并返回403错误——这就是输入不带http://的域名时,重定向规则根本没机会触发、直接跳转到403页面的原因。只有明确输入http://site.domain.com时,因浏览器请求处理的细微差异,规则才得以执行。
解决步骤
1. 关闭「SSL必填」选项
进入网站的SSL设置界面,取消「SSL必填」的勾选。这一步能让HTTP请求顺利到达URL Rewrite模块,而不是被IIS直接阻断。
2. 优化URL Rewrite规则
在原规则基础上添加redirectType="Permanent"(301永久重定向,更符合SEO规范),确保覆盖所有HTTP请求场景:
<rule name="HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="^OFF$" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" /> </rule>
3. 可选:增强规则覆盖端口场景
如果需要兼容显式指定80端口的请求(比如site.domain.com:80),可以调整条件为MatchAny,同时检查端口:
<rule name="HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAny"> <add input="{HTTPS}" pattern="^OFF$" /> <add input="{SERVER_PORT}" pattern="^80$" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" /> </rule>
4. 验证规则生效
重启IIS站点后,测试以下场景:
- 输入
site.domain.com→ 自动跳转至https://site.domain.com - 输入
http://site.domain.com→ 正常跳转至HTTPS - 输入
http://site.domain.com/test→ 跳转至https://site.domain.com/test
补充提醒
「SSL必填」适合已完全移除HTTP访问的场景,但要实现HTTP到HTTPS的平滑重定向,必须让URL Rewrite先处理请求,所以不能启用这个选项。用规则强制跳转更灵活,还能兼顾SEO需求。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

