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

求适用于SiteB的IIS Rewrite规则:实现sitea.com/b/指向SiteB

解决SiteB自动追加store=b查询参数的URL重写方案

我来帮你搞定这个URL重写的问题!你的需求很明确:让所有访问sitea.com/b/下的请求,自动带上store=b的查询参数,同时兼容原有已经带了query string的情况对吧?

首先得确认你已经安装了IIS URL Rewrite模块,这是规则生效的前提。接下来,把下面的规则放到SiteB文件夹的web.config的<system.webServer>节点内(如果没有<rewrite>节点就新建一个):

<system.webServer>
  <rewrite>
    <rules>
      <!-- 规则1:处理没有原有查询字符串的请求 -->
      <rule name="Append Store Param (No Query String)" stopProcessing="true">
        <match url="(.*)" />
        <conditions>
          <add input="{QUERY_STRING}" pattern="^$" />
        </conditions>
        <action type="Rewrite" url="{R:1}?store=b" />
      </rule>
      <!-- 规则2:处理已有查询字符串的请求 -->
      <rule name="Append Store Param (With Query String)" stopProcessing="true">
        <match url="(.*)" />
        <conditions>
          <add input="{QUERY_STRING}" pattern=".+" />
          <add input="{QUERY_STRING}" pattern="store=b" negate="true" />
        </conditions>
        <action type="Rewrite" url="{R:1}?{QUERY_STRING}&store=b" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

规则细节说明:

  • 规则1:针对没有任何查询字符串的请求(比如sitea.com/b/index.cfm),直接重写为带?store=b的URL,确保ColdFusion能获取到cgi.query_string=store=b。
  • 规则2:针对已经带查询字符串的请求(比如sitea.com/b/product.cfm?id=123),先检查是否已经存在store=b参数,不存在的话就自动追加&store=b,避免重复添加。
  • stopProcessing="true"是为了匹配到规则后就停止后续规则的执行,提升效率。

验证与优化:

  1. 验证效果:访问SiteB下的任意页面,在ColdFusion代码里输出#cgi.query_string#,应该能看到包含store=b的结果;如果原有参数存在,会和store=b一起出现。
  2. 排除静态资源:如果SiteB里的CSS/JS/图片等静态资源不需要这个参数,可以给两个规则的<conditions>里添加以下条件,跳过静态文件的重写:
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="false" />
    
  3. 确认IIS配置:确保SiteB在IIS里是作为SiteA的**应用程序(Application)**配置的,而不是单纯的虚拟目录,这样它的web.config才能独立生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:50