将白色 space 添加到参数时,查询字符串被破坏

Query string is broken when white space is added to parameter

我有以下 url:

inspiratie/color-collections/test/test/S%200502-B/test

web.config内的重写规则:

<rule name="color2">
  <match url="(kleur-en-inspiratie|inspiratie)/color-collections/([\S ^/]+)/([\S ^/]+)/([\S ^/]+)(/)?([\S ^/]*)" />
  <action type="Rewrite" logRewrittenUrl="true" appendQueryString="false" url="{R:1}/color-collections/color-detail?colorcollection={R:2}&amp;colorfamily={R:3}&amp;color={R:4}&amp;colorname={R:6}" />
</rule>

规则生效后,url 变为:

inspiratie/color-collections?colorcollection=test&colorfamily=test&color=S&colorname=

但预期的输出是:

inspiratie/color-collections?colorcollection=test&colorfamily=test&color=S 0502-B&colorname=test

如您所见,如果在颜色代码中使用 space,则查询字符串在颜色参数 ({R:4}) 之后被破坏。

当我在 IIS 中测试规则时,它工作正常并且 returns 预期结果。

我知道未转义的白色 space 不会工作,但希望转义的工作。

在你的情况下,问题是由于编码引起的。您需要为正则表达式使用 {UNENCODED_URL} 变量。规则应该是这样的:

<rule name="color2">
    <match url=".*" />
    <conditions>
        <add input="{UNENCODED_URL}" pattern="(kleur-en-inspiratie|inspiratie)/color-collections/([\S ^/]+)/([\S ^/]+)/([\S ^/]+)(/)?([\S ^/]*)" />
    </conditions>
    <action type="Rewrite" logRewrittenUrl="true" appendQueryString="false" url="{C:1}/color-collections/color-detail?colorcollection={C:2}&amp;colorfamily={C:3}&amp;color={C:4}&amp;colorname={C:6}" />                    
</rule>