题 IIS URL重写模块查询字符串参数


是否可以使用 URL重写 提供比它有“附加查询字符串”复选框更复杂的查询字符串功能?具体来说,是否可以为某些查询字符串参数指定键,并使其仅附加这些名称值对。

例如,输入:

http://www.example.org/test?alpha=1&beta=2&gamma=3

和查询字符串参数键列表:beta gamma

它应该输出: http://www.example.org/redirect?beta=2&gamma=3

(请注意,输入中的查询字符串参数以任意顺序出现。)


5
2018-03-24 13:37






答案:


我的解决方案是使用条件。通过匹配条件 {QUERY_STRING} 您可以使用反向引用在重定向URL中使用它们。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Redirect" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions trackAllCaptures="true">
                        <add input="{QUERY_STRING}" pattern="&amp;?(beta=[^&amp;]+)&amp;?" />
                        <add input="{QUERY_STRING}" pattern="&amp;?(gamma=[^&amp;]+)&amp;?" />
                        <add input="{REQUEST_URI}" pattern="^/redirect" negate="true" />
                    </conditions>
                    <action type="Redirect" url="/redirect?{C:1}&amp;{C:2}" appendQueryString="false" redirectType="Found" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

这个解决方案唯一可能的问题可能是(取决于你想要的是)重定向只会在两者同时发生 beta 和 gamma 查询字符串变量存在于查询字符串中。如果不是,则不会发生重定向。

重定向规则与任何URL匹配((.*))。如果需要,您可以更改它。我还添加了一个额外的条件,即不对规则匹配重定向URL本身,否则会导致重定向URL自身重定向。


12
2018-03-31 13:59