IIS URL 使用条件重写规则

IIS URL rewrite rule using conditions

我在 web.config 文件中配置了以下 URL 重写规则:

<rule name="Test Rule" stopProcessing="true">
  <match url="^$" />
  <conditions>
    <add input="{QUERY_STRING}" pattern="^(item=1|all|none|first).*$" />
  </conditions>
  <action type="Rewrite" url="/newsite/test.asp?{C:0}" />
</rule>     

以下来源 url 符合预期。

http://domainname?item=1&param1=x%param2=y

然而,重写的 url 在其查询字符串中包含 param1 和 param2。 {C:0} 不应该只转换为正则表达式组中匹配的内容,即 (item=1|all|none|first) 而不是它之后的任何内容吗?

重写在 ( ) 之后捕获所有内容的原因是因为 {C:0} 捕获了整个匹配项,而不仅仅是组。由于您只想捕获 ( )(捕获组 1)中的内容,您将使用:

{C:1}

另一个例子可能是:

^(item=1|all|none|first)/(abc).*$

因此仅捕获 abc 例如(捕获组 2):

{C:2}