IIS重定向规则修改:实现所有子域名流量重定向至主域名
IIS重定向规则修改:实现所有子域名流量重定向至主域名
嗨,这个问题我之前折腾过好一阵子,你已经摸到门道啦!之前的问题出在正则捕获组把那个多余的点也包含进去了,咱们调整一下正则就能完美解决。
先来解决你的核心需求:一级子域名重定向到主域名
比如要把 something.example.com/test 转到 example.com/test,直接修改条件里的正则即可。把你原来的规则替换成下面这个:
<rule name="RedirectAllSubdomainsToMainSite" enabled="true" stopProcessing="false"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <!-- 匹配一级子域名,捕获点后面的主域名部分(不带前缀点) --> <add input="{HTTP_HOST}" pattern="^[^.]+\.(.*)$" /> <!-- 可选:防止主域名本身被重定向,比如example.com不会触发规则 --> <add input="{HTTP_HOST}" pattern="^example\.com$" negate="true" /> </conditions> <action type="Redirect" url="https://{C:1}{REQUEST_URI}" redirectType="Permanent" /> </rule>
解释下这个正则:
^[^.]+\.(.*)$ 拆解来看:
^[^.]+:匹配开头的一串非点字符(也就是你的子域名,比如something)\.:匹配子域名和主域名之间的那个点(这个点不会被捕获到组里)(.*):捕获点后面的所有内容(也就是干净的主域名,比如example.com)
这样{C:1}拿到的就是不带多余点的主域名,重定向后就不会出现.example.com的问题啦。
如果需要处理多级子域名(比如a.b.example.com也转到example.com)
要是你的网站有多层子域名,想把所有前缀都砍掉直接跳根主域名,就把条件里的正则改成下面这个:
<add input="{HTTP_HOST}" pattern="^.*\.(.*\..*)$" />
这个正则会不管前面有多少级子域名,直接捕获最后的主域名.后缀部分(比如example.com),不管输入是a.b.example.com还是x.y.z.example.com,最终都会跳转到example.com。
测试验证
改完规则后,你可以在IIS的URL重定向模块里用测试工具验证:
- 输入
something.example.com/test→ 输出example.com/test - 输入
a.b.example.com/page→ 输出example.com/page(用第二个正则的话) - 输入
example.com→ 不会触发重定向(加了第二个条件的话)
这样应该就能满足你的所有需求啦!
备注:内容来源于stack exchange,提问作者4532066
相关产品推荐
相关产品推荐

