我已经用谷歌搜索了。我已经尝试了上千种SO的变体,但无济于事。
这是我的问题:
IIS上的一个虚拟主机。十个领域指向它。该应用程序设置为使用单个域的两个主机名,但所有其他别名应重定向到主site1.domain.com。
site1.domain.com(主站点/host.domain) site2.domain.com(在同一虚拟主机中运行的第二个应用程序)
我不想做的是设置一堆虚拟主机。我正在尝试让所有这些都在单个虚拟主机中运行,并重定向web.config中的所有内容。
这是web.config
的最新版本,处于无限循环中。我知道为什么,但是我无法解决第二条规则。
我的想法:
首先查找“第二”主机名,然后对其进行排序(因为它是文字),然后将其重定向到它的主目录。就其本身而言,它工作得很好。
完成后,查找不是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>
答案 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绑定请求,这似乎是个好主意。 (我希望这会稍快一些,因为您的应用将不必评估每个请求的重定向-但这是一个假设)