IIS URL重写 - 根据URL添加查询字符串

时间:2016-02-04 13:50:56

标签: asp.net .net iis

我在我的网站上添加了多个http绑定,如:

http://sub1.domain.com
http://sub2.domain.com
http://sub3.domain.com
http://sub4.domain.com
http://sub5.domain.com

当用户点击任何这些网址时,我需要为这些网址添加不同的查询字符串。

http://sub1.domain.com/?qs=10
http://sub2.domain.com/?qs=15
http://sub3.domain.com/?qs=25
http://sub4.domain.com/?qs=30
http://sub5.domain.com/?qs=50

我想在appSettings个密钥中保留查询字符串值。像

  <appSettings>
    <add key ="sub1" value="10" />
    <add key ="sub2" value="15" />
    ...
  </appSettings>

我编写了以下附加固定查询字符串的规则。但它会为所有五个网址添加qs=10。但我对于让它充满活力毫无头绪。

<rule name="Add query string param" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{QUERY_STRING}" pattern="qs=10" negate="true" />
            <add input="&amp;{QUERY_STRING}" pattern="^(&amp;.+)|^&amp;$" />
          </conditions>
          <action type="Redirect" url="http://{HTTP_HOST}/{R:0}?qs=10{C:1}" appendQueryString="false"  />
        </rule> 

2 个答案:

答案 0 :(得分:3)

你应该看看rewrite maps。我还没有对它进行测试,但它应该是这样的:

<rewrite>
 <rewriteMaps>
  <rewriteMap name="SubDomainQueryStrings">
   <add key="sub1.domain.com" value="qs=10" />
   <add key="sub2.domain.com" value="qs=15" />
   <add key="sub3.domain.com" value="qs=25" />
   <add key="sub4.domain.com" value="qs=30" />
   <add key="sub5.domain.com" value="qs=50" />
  </rewriteMap>
 </rewriteMaps>
 <rules>
  <rule name="Add query string param" stopProcessing="true">
   <match url=".*" />
   <conditions>
    <add input="{QUERY_STRING}" pattern="{SubDomainQueryStrings:{HTTP_HOST}}" negate="true" />
    <add input="&amp;{QUERY_STRING}" pattern="^(&amp;.+)|^&amp;$" />
   </conditions>
   <action type="Redirect" url="{R:0}?{SubDomainQueryStrings:{HTTP_HOST}}{C:1}" appendQueryString="false"/>
  </rule>
 </rules>
<rewrite>

答案 1 :(得分:2)

您需要使用HTTP_HOST条件来检查子域,如下所示:

group(4)

前两个子域的代码应如下所示:

group(6)