IIS配置*.it.test.com域名HTTP转HTTPS的URL重写规则故障排查
现有规则问题排查
- 语法不匹配:规则声明了
patternSyntax="Wildcard"(通配符语法),但HTTP_HOST的匹配规则写的是正则表达式格式^it.test.com$,两种语法混用导致匹配失效。 - 匹配范围错误:就算切换为正则语法,原有规则
^it.test.com$仅能精准匹配主域名it.test.com,无法覆盖*.it.test.com下的所有子域名(如aa.it.test.com、bb.it.test.com)。
正确配置方案
方案1:正则匹配模式(更灵活,推荐)
修改语法规则为正则模式,调整域名匹配规则即可适配所有子域:
<rule name="Redirect *.it.test.com to HTTPS" enabled="true" patternSyntax="ECMAScript" stopProcessing="true"> <match url="*" ignoreCase="true" negate="false" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <!-- 匹配所有*.it.test.com子域,包含it.test.com本身 --> <add input="{HTTP_HOST}" ignoreCase="true" matchType="Pattern" pattern="^(.+\.)?it\.test\.com$" /> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" /> </rule>
如果不需要匹配纯it.test.com,仅匹配子域名,可将上述pattern修改为^.+\.it\.test\.com$;生产环境建议使用301永久重定向,测试阶段可改为Temporary临时重定向。
方案2:通配符匹配模式(兼容原有语法)
如果要保留Wildcard语法,直接调整域名匹配规则即可:
<rule name="Redirect *.it.test.com to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" ignoreCase="true" negate="false" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTP_HOST}" ignoreCase="true" matchType="Pattern" pattern="*.it.test.com" /> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Temporary" /> </rule>
注意通配符模式下*.it.test.com仅匹配子域名,不包含it.test.com本身。
内容的提问来源于stack exchange,提问作者Birger
相关产品推荐
相关产品推荐

