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

时间:2017-11-23 11:49:27

标签: c# web-config url-rewrite-module

我有以下网址:

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>

规则启动后,网址变为:

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

但预期的输出是:

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

正如您可以看到在颜色代码中是否使用了空格,查询字符串在颜色参数({R:4})之后被破坏。

当我在IIS中测试规则时,它可以正常工作并返回预期的结果。

我知道未转义的白色空间不起作用,但希望逃脱的空间能够正常工作。

1 个答案:

答案 0 :(得分:2)

在您的情况下因编码导致问题原因。您需要将{UNENCODED_URL}变量用于regexp。规则应该是这样的:

<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>