IIS重写规则,以重定向特定域的网址到同一域上的不同url

问题描述:

我只是想要一个IIS 7.5重写规则将http://www.domain.com/url1重定向到http://www.domain.com/url2(同域)。这可以通过以下方式实现:IIS重写规则,以重定向特定域的网址到同一域上的不同url

<rule name="Redirect url" enabled="true" stopProcessing="true"> 
    <match url="^url1" /> 
    <action type="Redirect" url="http://www.domain.com/url2" 
     appendQueryString="false" redirectType="Permanent" /> 
</rule> 

但是,该网站监听几个域,因此上面成为所有域的全局规则。我如何使这个特定于domain.com?已尝试更改匹配网址并添加条件,但无法使其正常工作。谢谢。

我得到它的工作是这样的:

<rule name="Redirect url1" stopProcessing="true"> 
    <match url="^url1$" /> 
    <conditions> 
      <add input="{HTTP_HOST}" pattern="^(www.)?domain.com$" /> 
    </conditions> 
    <action type="Redirect" url="http://www.domain.com/url2" 
     appendQueryString="false" redirectType="Permanent" /> 
</rule> 
+0

为什么在匹配节点中使用^ url1 $?或者,是否打算由OP称为http://www.example.com/url1的内容取代? 这是否合理 - 匹配所有URL即“。*”不是更好吗? PS:你说的其余部分为我工作。 – Jacques

+0

我希望domain.com/subdir1重定向到domain.com/subdir2,但网站会侦听多个域。我不希望这个规则重定向其他领域。 url1将被您想要重定向的起始段(sub dir)替换。条件是针对特定域的。行动具有相同的域和新的细分。 –

+0

有道理,谢谢 – Jacques

使用此页面上的答案,我能调整规则为自己。我还添加了查询参数。希望它张贴在这里,在情况下,它可以帮助别人:

<!-- probably requires custom rewrite module, available through web platform installer --> 
<rule name="Redirect oldsite.com" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions> 
     <add input="{HTTP_HOST}" pattern="^.*oldsite\.com$" /> 
    </conditions> 
    <action type="Redirect" url="http://www.newsite.com/page.cfm?userid=123&amp;mode=form" 
     appendQueryString="false" redirectType="Permanent" /> 
</rule> 

解释某些位:

澄清一些混乱,这种“URL”是部分后域后的第一个斜杠,而不是整个网址。我将把它放在这里,以便它得到任何URL。现在

<match url=".*" /> 

,我们将添加一个条件,因为我有这个计算机上的多个网站,所以我要确保这条规则适用于只是其中之一。我还用通配符代替“(www。)?”因为通配符会捕获任何子域。

<conditions> 
    <add input="{HTTP_HOST}" pattern="^.*oldsite\.com$" /> 
</conditions> 

而且最后要注意的是谁想把多个查询字符串PARAMS的人你需要逃避它们之间的符号,因为如果你不这样做,它不会工作。

​​3210