求适用于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"是为了匹配到规则后就停止后续规则的执行,提升效率。
验证与优化:
- 验证效果:访问SiteB下的任意页面,在ColdFusion代码里输出
#cgi.query_string#,应该能看到包含store=b的结果;如果原有参数存在,会和store=b一起出现。 - 排除静态资源:如果SiteB里的CSS/JS/图片等静态资源不需要这个参数,可以给两个规则的
<conditions>里添加以下条件,跳过静态文件的重写:<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="false" /> - 确认IIS配置:确保SiteB在IIS里是作为SiteA的**应用程序(Application)**配置的,而不是单纯的虚拟目录,这样它的
web.config才能独立生效。
内容的提问来源于stack exchange,提问作者Abdul Rauf
相关产品推荐
相关产品推荐

