在IIS中将子域名URL重定向到另一个子域名

9

我需要在IIS 7.5中将一个“虚假”子域重定向到一个真实的子域。原因是,市场部门不想在印刷品中使用实际的网站地址。

实际网站 URL:

reporting.usapartners.com

市场部门希望 report.usapartners.com(虚假)重定向到 reporting.usapartners.com(真实)

再次说明,report.usapartners.com并不存在,只有reporting.usapartners.com存在

这是我尝试过的:

我在IIS中为reporting.usapartners.com站点添加了一个绑定。我添加了report.usapartners.com作为主机名,并使用了reporting.usapartners.com的IP地址。

然后,我进入了reporting.usapartners.com的web.config文件,并添加了以下内容:

<rewrite>
    <rules>
        <rule name="report" stopProcessing="true">
          <conditions logicalGrouping="MatchAll">
            <add input="{HTTP_HOST}" pattern="report.usapartners.com" negate="false" />
          </conditions>
          <action type="Redirect" url="http://reporting.usapartners.com" appendQueryString="false" redirectType="Permanent" />
        </rule>
    </rules>
</rewrite>

看起来我的解决方案创建了一个无法重定向的别名。

我是否正确地解决了这个问题?似乎应该是一个简单的问题,但也许不是?欢迎并感谢任何想法。

谢谢


1
我只是好奇,为什么不添加另一个绑定。一个站点可以有多个主机名。只要没有涉及到 SSL,这应该不是问题。 - Osa E
2个回答

7
我认为您需要在IIS中创建一个具有主机绑定的单独站点,用于report.usapartners.com(虚假站点)。这将是一个存根站点(它仍然需要磁盘上的路径,但只会有一个web.config),它将托管重定向规则。
现在,在IIS中为该站点单击HTTP重定向,并选中重定向请求到此位置,并将http://reporting.usapartners.com放入文本框中。然后选择重定向所有请求到确切目标(而不是相对于目标),不要选中下一个,并选择状态代码永久(301)
如果您希望重定向并保留子目录和/或查询字符串,则可以更改文本框的内容为http://reporting.usapartners.com$S$Q。请注意,这种情况下没有尾随斜杠。 $S保留子目录,$Q保留查询字符串。

这就是我想知道的。我以为可能有更简单的方法。谢谢。 - Slinky
我会尝试,但我之前已经做过了并且总是有效的,但是这需要很多工作,但至少它能够工作。 - Slinky

5

您的规则导致了重定向循环。

请观察您的规则:

  • 匹配任何给定的URL(包括“/”,“/something”,“/something/another.html”等)
  • 如果主机名不是“report.usapartners.com”
  • 永久重定向请求到“http://reporting.usapartners.com

因此,当用户被重定向到报告子域时,它会再次被重定向到报告,因为主机名不是“report.usapartners.com”。

关键在于规则条件上的negate="true"属性。将其删除或设置为false,然后您就可以继续了。

编辑:

您已经接近成功了。

真正的解决方案是将规则中的主机名更改为所需的主机名,并保持否定为真,这样您的规则将执行以下操作:

  • 匹配任何给定的URL(包括“/”,“/something”,“/something/another.html”等)
  • 如果主机名不是“reporting.usapartners.com”
  • 永久重定向请求到“http://reporting.usapartners.com

代码:

...
<add input="{HTTP_HOST}" pattern="reporting.usapartners.com" negate="true" />
...

谢谢。我已经将其删除,但我怀疑这可能会导致浏览器重定向错误。没有这个,仍然出现500错误:<match url="(.*)" ignoreCase="true" />。 - Slinky

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