IIS重写安全添加自定义查询字符串

时间:2014-07-29 14:23:29

标签: iis iis-7 url-rewriting

我想将url路径中的内容移到查询字符串中。这几乎就像子域重写一样。这里的重写应该是这样的: 〜/ ch-ar / rest - > 〜/休息?DOM = CH-AR 〜/ su-bd / rest?param = val - > 〜/休息PARAM = VAL&安培; DOM = SU-BD

我绝对可以通过匹配/替换来完成第一部分,而不是我能够解释的事情。我不确定是否有某种方法可以安全地将我的键值对添加到{QUERY_STRING}变量,但这可能是理想的。此名称值对的键永远不会更改,查询字符串的顺序对我来说并不重要。

1 个答案:

答案 0 :(得分:1)

我建议使用以下2条规则,一条用于具有查询字符串的请求,另一条用于不具有查询字符串的请求。我使用了特定于语言的URI主干作为示例,并将动作设置为重定向,因此更容易测试。

            <rule name="Language URI to QS - Existing Query String" stopProcessing="true">
                <match url="^([a-z]{2}-[a-z]{2})(.*)" />
                <conditions>
                    <add input="{QUERY_STRING}" pattern="(.+)" />
                </conditions>
                <serverVariables>
                    <set name="QUERY_STRING" value="{C:1}&amp;dom={R:1}" />
                </serverVariables>
                <action type="Redirect" url="{R:2}" appendQueryString="true" redirectType="Found" />
            </rule>

            <rule name="Language URI to QS - No Query String" stopProcessing="true">
                <match url="^([a-z]{2}-[a-z]{2})(.*)" />
                <conditions>
                    <add input="{QUERY_STRING}" pattern=".+" negate="true" />
                </conditions>
                <serverVariables>
                    <set name="QUERY_STRING" value="dom={R:1}" />
                </serverVariables>
                <action type="Redirect" url="{R:2}" appendQueryString="true" redirectType="Found" />
            </rule>