Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net IIS URL重写-根据URL添加查询字符串_Asp.net_.net_Iis - Fatal编程技术网

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

Asp.net IIS URL重写-根据URL添加查询字符串,asp.net,.net,iis,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 当用户点击任何一个URL时,我需要向这些URL添加不同的查询字符串 http://sub1.domain.com/?qs=10 http://sub2.domain.com/?qs=15 http://sub3.domain

我已将多个http绑定添加到我的站点,如:

http://sub1.domain.com
http://sub2.domain.com
http://sub3.domain.com
http://sub4.domain.com
http://sub5.domain.com
当用户点击任何一个URL时,我需要向这些URL添加不同的查询字符串

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>

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

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

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

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

您可能应该看看。我还没有测试过,但应该是这样的:

<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>

如果它非常动态,您可以编写一个IHTTP模块,如下所示: