IIS 重写规则一个具有多个值的查询参数

IIS rewrite rule one query parameter with multiple values

IIS web.config:

我正在尝试重定向像

这样的路径

mysite.com/?myparam=123,321,112 到 mysite.com/mypage?param=123,321,112

 <rule name="Multiple QueryValue String Rewrite" enabled="true">
          <match url="(.*)" />
          <conditions>
            <add input="{QUERY_STRING}" pattern="myparam=(.\,)" />            
          </conditions>
          <action type="Redirect" url="/mypage?param={C:0}" appendQueryString="false" />
        </rule>

但无论我尝试什么,它只会转发第一个参数。导致 /mypage?param=123

我尝试了 {C} 和模式正则表达式的多种组合。

重要提示:在尝试新事物之前,请记住始终清除浏览器缓存!这是强制性的。

现在...

  1. 您使用的模式不正确,您必须使用 Wiktor Stribiżew
  2. 建议的模式

所以使用 pattern="myparam=([0-9\,]*)url="/mypage?param={C:1}" 试试这个:

 <rule name="Multiple QueryValue String Rewrite" enabled="true">
          <match url="(.*)" />
          <conditions>
            <add input="{QUERY_STRING}" pattern="myparam=([0-9\,]*)" />            
          </conditions>
          <action type="Redirect" url="/mypage?param={C:1}" appendQueryString="false" />
 </rule>

如果不正确,则“,”字符有问题...关于编码?

如果你尝试这个,会发生什么?:

 <rule name="Multiple QueryValue String Rewrite" enabled="true">
          <match url="(.*)" />
          <conditions>
            <add input="{QUERY_STRING}" pattern="myparam=([0-9]*)\,([0-9]*)\,([0-9]*)" />            
          </conditions>
          <action type="Redirect" url="/mypage?param={C:1},{C:2},{C:3}" appendQueryString="false" />
 </rule>

如果只针对mysite.com/?myparam=123,321,112,可以尝试如下URL改写规则:

 <rule name="Multiple QueryValue String Rewrite" enabled="true">
          <match url="(.*)" />
          <conditions>
            <add input="{QUERY_STRING}" pattern="myparam=(.*)" />            
          </conditions>
          <action type="Redirect" url="/mypage?param={C:1}" appendQueryString="false" />
        </rule>