Web.config URL重写异常求助:含WWW的URL无法跳转HTTPS
解决Web.config URL重写中带WWW的HTTP URL无法跳HTTPS的问题
看起来你已经把大部分URL规范化规则都搞定了,唯独漏了对已带WWW但用HTTP访问的场景处理——这就是为什么这类URL不会触发HTTPS跳转的核心原因。我帮你调整了规则,既解决这个问题,又严格遵循你要求的「单次重定向」原则,完美覆盖所有需求:
修改后的完整规则配置
<rules> <!-- 资源文件白名单:直接放行,不处理后续规则 --> <rule name="WhiteList - resources" stopProcessing="true"> <match url="^resources/" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> <action type="None" /> </rule> <!-- 移除default.aspx(服务器内部重写,不改变地址栏) --> <rule name="SEO - remove default.aspx" stopProcessing="false"> <match url="(.*?)/?default\.aspx$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTP_METHOD}" pattern="GET" /> </conditions> <action type="Rewrite" url="_{R:1}" /> </rule> <!-- 移除末尾斜杠(服务器内部重写,不改变地址栏) --> <rule name="SEO - Remove trailing slash" stopProcessing="false"> <match url="(.+)/$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTP_METHOD}" pattern="GET" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="_{R:1}" /> </rule> <!-- 非自定义扩展名URL转小写(服务器内部重写,不改变地址栏) --> <rule name="SEO - ToLower" stopProcessing="false"> <match url="(.*)" ignoreCase="false" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{REQUEST_URI}" pattern="\.pngx|\.jpgx|\.gifx|\.bmpx|\.orcx" negate="true" /> <add input="{HTTP_METHOD}" pattern="GET" /> <add input="{R:1}" pattern="[A-Z]" ignoreCase="false" /> </conditions> <action type="Rewrite" url="_{ToLower:{R:1}}" /> </rule> <!-- 核心规则:强制HTTPS + 强制WWW,单次重定向 --> <rule name="Force HTTPS and WWW" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAny" trackAllCaptures="false"> <!-- 匹配非HTTPS的请求 --> <add input="{HTTPS}" pattern="off" /> <!-- 匹配不带WWW前缀的请求 --> <add input="{HTTP_HOST}" pattern="^www\.testssl\.orca-bree\.be$" negate="true" /> </conditions> <action type="Redirect" url="https://www.testssl.orca-bree.be/{C:1}" redirectType="Permanent" /> <serverVariables> <!-- 捕获原始URL,替换掉内部重写产生的_前缀 --> <set name="C:1" value="{R:1}" /> <set name="C:1" value="{Replace:{C:1},^_+,}" /> </serverVariables> </rule> <!-- 清理内部重写产生的_前缀(仅在已符合HTTPS+WWW标准时触发) --> <rule name="Clean up rewritten URLs" stopProcessing="true"> <match url="^(_+)(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTP_METHOD}" pattern="GET" /> <!-- 确保已经是HTTPS和WWW,避免重复重定向 --> <add input="{HTTPS}" pattern="on" /> <add input="{HTTP_HOST}" pattern="^www\.testssl\.orca-bree\.be$" /> </conditions> <action type="Redirect" url="{R:2}" redirectType="Permanent" /> </rule> </rules>
关键改动说明
合并HTTPS与WWW规则,实现单次重定向
新增的Force HTTPS and WWW规则用MatchAny逻辑,只要请求不符合「HTTPS+WWW」标准(不管是缺HTTPS还是缺WWW),就一次性跳转到最终的标准地址,完全避免多次重定向的问题。处理内部重写的_前缀
通过serverVariables把内部重写产生的_前缀提前替换掉,保证重定向的地址是干净的,不需要额外跳转。优化清理规则的触发条件
修改原有的清理规则,增加HTTPS=on和HTTP_HOST=www.testssl.orca-bree.be的检查,确保只有在已经符合标准的情况下,才清理内部重写的_前缀,避免和核心重定向规则冲突。
覆盖所有需求场景
现在这套规则可以完美处理你列出的所有情况:
- 仅触发单次重定向
- 自动忽略
resources/下的资源文件 - 移除URL中的
default.aspx - 去除末尾斜杠(非文件/目录)
- 非自定义扩展名的URL自动转小写(不含查询字符串)
- 强制添加WWW前缀
- 强制HTTPS(包括已带WWW的HTTP URL)
内容的提问来源于stack exchange,提问作者user2623023
相关产品推荐
相关产品推荐

