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

IIS URL Rewrite修改URL开头时查询串域名未替换问题咨询

问题根因

你写的规则没有达到预期,核心是两个默认逻辑和配置缺失导致的:

  • IIS URL Rewrite模块默认会自动把原始请求的查询字符串追加到你配置的跳转URL末尾,不会自动修改查询串内部的文本内容
  • 现有规则仅对请求域名、路径部分做了匹配替换,没有处理查询字符串中host参数携带的旧域名,也没有关闭自动追加查询串的开关,最终导致查询串里的旧域名被原样带了过去。
正确配置

将原有重写规则替换为以下内容即可实现需求:

<rewrite>
    <rules>
        <rule name="redirect app" stopProcessing="true">
            <match url="^(.*)$" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="^web1\.domain\.org$" />
                <add input="{QUERY_STRING}" pattern="host=https://web1\.domain\.org(/[^&]*)&?(.*)" />
            </conditions>
            <action 
                type="Redirect" 
                url="https://web2.domain.org/{R:1}?host=https://web2.domain.org{C:1}&{C:2}" 
                appendQueryString="false" 
                redirectType="Temporary" 
            />
        </rule>
    </rules>
</rewrite>
规则说明
  • ^(.*)$匹配原始请求的完整路径,捕获组{R:1}会保留所有路径内容,不会出现路径丢失的问题
  • 第一个条件校验请求Host为旧域名,避免其他域名的请求被误跳转
  • 第二个条件拆分原始查询串:{C:1}捕获host参数中旧域名后的路径片段,{C:2}捕获host参数之外的所有其他请求参数,比如示例中的thisid=zzzz
  • appendQueryString="false"是必须配置的项,作用是关闭重写模块自动拼接原始查询串的默认行为,完全使用我们替换完成后的新查询串
  • 初始调试阶段建议用redirectType="Temporary"(302跳转),确认所有跳转逻辑符合预期后,再改成Permanent(301跳转)利用缓存提升访问速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 16:15:53