web.config有许多域别名,一个IIS VHOST中有两个站点。 Arghhhhhhh

时间:2018-06-25 21:47:24

标签: iis web-config url-rewrite-module

我已经用谷歌搜索了。我已经尝试了上千种SO的变体,但无济于事。

这是我的问题:

IIS上的一个虚拟主机。十个领域指向它。该应用程序设置为使用单个域的两个主机名,但所有其他别名应重定向到主site1.domain.com。

site1.domain.com(主站点/host.domain) site2.domain.com(在同一虚拟主机中运行的第二个应用程序)

我不想做的是设置一堆虚拟主机。我正在尝试让所有这些都在单个虚拟主机中运行,并重定向web.config中的所有内容。

这是web.config的最新版本,处于无限循环中。我知道为什么,但是我无法解决第二条规则。

我的想法:

  1. 首先查找“第二”主机名,然后对其进行排序(因为它是文字),然后将其重定向到它的主目录。就其本身而言,它工作得很好。

  2. 完成后,查找不是site1.domain.com的任何内容,然后将其重定向到site1.domain.com。

所有内容当然都需要重定向到SSL。

是的,我知道我太直率了,但是我根本无法通过我需要的逻辑思考或理解自己的方式。

<rewrite>
    <rules>
        <rule name="site2 HTTPS redirect" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="^(site2.)?domain.com" ignoreCase="true" />
                <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{R:1}" />
        </rule>
        <rule name="site1 HTTPS redirect" stopProcessing="true">
            <match url="(.*)" ignoreCase="true" />
            <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="(https://site1)?.domain.com" />
            </conditions>
            <action type="Redirect" url="https://site1.domain.com{R:1}" redirectType="Permanent" />
        </rule>
    </rules>
   </rewrite>

1 个答案:

答案 0 :(得分:0)

您的web.config存在问题。 pattern="(https://site1)?.domain.com"将永远不会与{HTTP_HOST}匹配,因为它仅包含主机名,即:site1.domain.com(您可以像前面的规则一样对logicalGrouping="MatchAll"使用2个条件)。

我个人建议使用其他专用的虚拟主机来处理重写(请参见我的答案:IIS Redirecting non-WWW to WWW along with HTTP to HTTPS ISSUE)。它更简单,您的主站点应用程序池不必进行任何重定向,它仅处理托管站点的ssl绑定请求,这似乎是个好主意。 (我希望这会稍快一些,因为您的应用将不必评估每个请求的重定向-但这是一个假设)