我有以下网址:
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}&colorfamily={R:3}&color={R:4}&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中测试规则时,它可以正常工作并返回预期的结果。
我知道未转义的白色空间不起作用,但希望逃脱的空间能够正常工作。
答案 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}&colorfamily={C:3}&color={C:4}&colorname={C:6}" />
</rule>