【问题标题】:web.config many domain aliases, two sites in one IIS VHOST. Arghhhhhhhweb.config 多个域别名,一个 IIS VHOST 中的两个站点。啊啊啊
【发布时间】:2018-06-25 21:47:23
【问题描述】:

我已经用谷歌搜索过了。我已经尝试过在 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>

【问题讨论】:

  • 单个规则怎么样,基于协议的单个条件然后使用主机变量作为目标 url,因此它涵盖所有绑定域?
  • 如果我的理解正确,我需要托管 两个 单独的主机名,所以我不需要至少两个操作吗?如果 URL = site2,请转到此处 + SSL。如果 URL = 其他所有内容,请转到 site1。
  • 可以接受第二个虚拟主机吗?那将是更简单的逻辑。见stackoverflow.com/questions/49842621/…

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


【解决方案1】:

您的 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 绑定请求,这似乎是个好主意。 (我希望它会稍微快一些,因为您的应用不必评估每个请求的重定向 - 但这是一个假设)

【讨论】:

  • 谢谢。令人失望的是,这无法在单个 VHOST 中解决,所以我会走这条路。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多