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

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

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

答案1

我的解决方案是使用条件。通过匹配条件,{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>

此解决方案的唯一可能问题是(取决于您想要什么)只有当查询字符串中同时存在betagamma查询字符串变量时才会发生重定向。如果不存在,则不会发生重定向。

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

相关内容