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

IIS中URL重写正则表达式问题:特定域名匹配失效

IIS URL重写匹配特定域名前缀的解决方案

你的问题出在对IIS URL重写模块的匹配范围理解有误:默认情况下,Match URL中的正则表达式仅作用于请求的路径部分(即域名后的/anyfolder/anyfile这类内容),不会包含协议(http/https)和域名本身,所以直接写^http(s)?://subdomain.maindomain.com(.*)自然无法匹配。

正确的配置方式需要结合服务器变量来判断域名,具体步骤如下:

1. 添加匹配域名的条件

在URL重写规则的Conditions区域,添加以下条件:

  • 条件输入:{HTTP_HOST}
  • 检查输入字符串是否匹配正则表达式:^subdomain\.maindomain\.com$
    (注意:点号.在正则里是通配符,必须用反斜杠\转义)

如果需要限定仅匹配HTTPS请求,可以再添加一个条件:

  • 条件输入:{HTTPS}
  • 检查输入字符串是否等于:on

2. 配置路径匹配规则

在Match URL区域,设置正则表达式为^(.*),这样就能匹配该域名下的任意路径内容。

3. 完整规则示例(XML格式)

如果直接在web.config中配置,规则代码如下:

<rewrite>
  <rules>
    <rule name="Match Specific Domain Prefix" stopProcessing="true">
      <match url="^(.*)$" />
      <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="^subdomain\.maindomain\.com$" />
        <add input="{HTTPS}" pattern="on" /> <!-- 可选,仅限定HTTPS -->
      </conditions>
      <action type="Rewrite" url="https://subdomain.maindomain.com/{R:1}" appendQueryString="true" />
    </rule>
  </rules>
</rewrite>
  • {R:1}对应Match URL中(.*)捕获的路径内容
  • appendQueryString="true"会自动保留原查询参数(比如param1=1&param2=2)

关键说明

  • 不要试图在Match URL的正则里包含协议和域名,这部分逻辑必须通过Conditions中的服务器变量来实现
  • 若需要匹配带www或不带www的域名,可以调整{HTTP_HOST}的正则,比如^(www\.)?subdomain\.maindomain\.com$

内容的提问来源于stack exchange,提问作者Frank Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:02:37