Microsoft IIS 10动态URL重写/跳转配置求助:保留URL参数的域名替换需求
Fix URL Rewrite Parameter Loss for Specific Paths in IIS 10
我帮你搞定这个参数丢失的问题——这在IIS URL Rewrite里是个常见的小坑,主要是规则配置里没正确保留查询字符串,或者规则的匹配逻辑、优先级没调整到位。结合你的需求,下面是具体的解决步骤:
1. 排查现有规则的核心问题
你遇到参数丢失,大概率是这两个原因之一:
- 规则的Action部分没勾选「Append query string」选项,导致IIS没自动携带原查询参数;
- 重写URL的写法没包含查询字符串的占位符,或者规则模式的匹配范围没覆盖到需要保留的内容。
另外,你已经有一条通用跳转规则,要确保这条特定规则的优先级高于通用规则——因为IIS是按规则列表的顺序执行,匹配到第一条符合条件的规则后就会停止(除非你设置了「Stop processing of subsequent rules」为否)。
2. 正确配置特定URL重写规则
打开IIS管理器的URL Rewrite模块,新建一条空白规则,按以下步骤配置:
匹配URL设置
- Requested URL: Matches the Pattern
- Using: Regular Expressions
- Pattern:
^pages/viewpage\.action(注意转义.,因为正则里.是通配符) - Ignore case: 勾选
条件设置
点击「Add」添加一个条件:
- Input:
{HTTP_HOST} - Check if input string: Matches the Pattern
- Pattern:
^mysite$(精确匹配原域名,避免影响其他子域名) - Ignore case: 勾选
操作设置
- Action type: Redirect(如果是内部重写需求就选Rewrite,根据你的业务场景选择)
- Redirect URL:
https://mysite.xyz.xyz/{R:0}{R:0}代表匹配到的整个路径部分(也就是pages/viewpage.action)
- Append query string: 一定要勾选!这是保留参数的关键
- Redirect type: 根据需求选择(比如301永久跳转或302临时跳转)
- Stop processing of subsequent rules: 勾选,避免这条规则触发后再执行通用跳转规则
3. 验证规则的web.config片段
如果直接编辑web.config,对应的规则代码如下(放在<rewrite>节点的<rules>里):
<rule name="Specific Viewpage Redirect with Params" stopProcessing="true"> <match url="^pages/viewpage\.action" /> <conditions> <add input="{HTTP_HOST}" pattern="^mysite$" /> </conditions> <action type="Redirect" url="https://mysite.xyz.xyz/{R:0}" appendQueryString="true" redirectType="Permanent" /> </rule>
把这条规则放在你的通用跳转规则之前,确保优先匹配。
4. 测试验证
现在测试你的示例URL:
mysite/pages/viewpage.action?thisisexample1会正确跳转到mysite.xyz.xyz/pages/viewpage.action?thisisexample1mysite/pages/viewpage.action?anothersite会正确跳转到mysite.xyz.xyz/pages/viewpage.action?anothersite
同时你的通用跳转规则依然会处理其他非pages/viewpage.action路径的请求,互不影响。
内容的提问来源于stack exchange,提问作者user11463883
相关产品推荐
相关产品推荐

