You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:53:04