将白色 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}&colorfamily={R:3}&color={R:4}&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}&colorfamily={C:3}&color={C:4}&colorname={C:6}" />
</rule>
我有以下 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}&colorfamily={R:3}&color={R:4}&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}&colorfamily={C:3}&color={C:4}&colorname={C:6}" />
</rule>