IIS的重写规则可以将特定域名的URL重定向到同一域名下的不同URL

8

我希望您能够帮助我创建一个IIS 7.5的重写规则,将http://www.domain.com/url1重定向到http://www.domain.com/url2(同一域名)。这可以通过以下方式实现:

<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?尝试更改匹配url和添加条件,但无法使其正常工作。谢谢。
2个回答

11

我用以下方法使它正常工作:

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

为什么在匹配节点中使用^url1$?或者这是打算用OP所述的http://www.example.com/url1替换的?这样做有意义吗 - 匹配所有URL,即“.*”不是更好吗?附注:你说的其余部分对我有用。 - Jacques
我想让 domain.com/subdir1 重定向到 domain.com/subdir2,但该网站侦听多个域。我不希望此规则重定向其他域。url1 将被替换为您想要重定向的起始段(子目录)。该条件适用于特定域。动作具有相同的域和新段。 - James Barry

5

通过这个页面上的答案,我能够为自己调整一条规则。我还添加了查询参数。如果有帮助的话,我想在这里发布它:

<!-- 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。我会加入这个功能,以便获取任何URL。

<match url=".*" />

现在,我们将添加一个条件,因为我在这台计算机上有多个网站,所以我想确保此规则仅适用于其中一个网站。我还使用了通配符而不是“(www.)?”因为通配符将捕获任何子域。
<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" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接