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

IIS重写安全添加自定义查询字符串,iis,iis-7,url-rewriting,Iis,Iis 7,Url Rewriting,我想将url路径中的某些内容移出查询字符串。这几乎就像是子域重写。以下是重写的内容: ~/ch-ar/rest->~/rest?dom=ch-ar ~/su bd/rest?param=val->~/rest?param=val&dom=su bd 我肯定可以通过匹配/替换来完成第一部分,这不是我能够解释的。我不确定是否有某种方法可以安全地将我的键值对添加到{QUERY_STRING}变量,但这可能是理想的。此名称-值对的键永远不会更改,查询字符串的顺序对我来说并不重要。我建议使用以下两个规则,

我想将url路径中的某些内容移出查询字符串。这几乎就像是子域重写。以下是重写的内容: ~/ch-ar/rest->~/rest?dom=ch-ar ~/su bd/rest?param=val->~/rest?param=val&dom=su bd


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

我建议使用以下两个规则,一个用于有查询字符串的请求,另一个用于没有查询字符串的请求。我使用了一个特定于语言的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>


这听起来是个不错的主意,不过我需要查找否定的作用。我希望我能在一个规则中做到这一点,在正则表达式中使用前瞻,并将输入中有一个“?”的结果与我附加语言的方式联系起来,但看起来我无法做到这一点。否定颠倒了条件:在简单的英语中:如果查询字符串不包含“something”,则条件为true。为了我的理智,当你不得不在6个月后的几十次重写中进行筛选时,我尽量让我的重写保持尽可能简单。。。