【问题标题】:Query string is broken when white space is added to parameter将空格添加到参数时,查询字符串被破坏
【发布时间】:2018-05-07 09:09:08
【问题描述】:

我有以下网址:

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&amp;colorfamily=test&amp;color=S&amp;colorname=

但预期的输出是:

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

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

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

我知道未转义的空白将不起作用,但希望转义的空白起作用。

【问题讨论】:

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


    【解决方案1】:

    在您的情况下,问题是由于编码造成的。您需要将{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>
    

    【讨论】:

    • 大约有 8000 种颜色变化。据我了解,使用您的解决方案,我需要在&lt;add input="{UNENCODED_URL}"... 中列出所有 8000 个网址?
    • 你不需要它。你为什么这么认为?这是一种通用的正则表达式,它将{VAR0}/color-collections/{VAR1}/{VAR2}/{VAR3}/{VAR4} 重写为{VAR0}/color-collections?colorcollection={VAR1}&amp;colorfamily={VAR2}&amp;color={VAR3}&amp;colorname={VAR4}
    猜你喜欢
    • 2021-04-22
    • 2011-02-11
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多