IIS 10 Url Rewrite,多个规范 TLD 和非规范子域 + HTTPS

IIS10 UrlRewrite, multiple canonical TLD's & non-canonical sub-domains + HTTPS

我在 URL 重写时遇到了一些问题。

我有一个网站在 IIS10 的同一个站点内托管多个子站点。主站点有 3 个 TLD,应重定向到主规范 TLD。

在同一个站点上,有多个附加绑定主要 TLD 的子域,我不想重定向到我的主要 TLD。

这就是我希望 URL 重写工作的方式:

TLD

mydomain.com

mydomain2.com

mydomain3.com

--> mydomain2.com & mydomain3.com 应该使用 HTTP 到 HTTPS 重定向到 mydomain.com

子域

c1.mydomain.com

c2.mydomain.com

c3.mydomain.com

等..

--> c1.mydomain.comc2.mydomain.comc3.mydomain.com 等...不应使用 HTTP 到 HTTPS 重定向到 mydomain.com

这些是我有问题的地方

如果我创建一个重定向 HTTP 到 HTTPS 的规则,那么 mydomain2.commydomain3.com 不会启动,因为我的 SSL 证书只适用于 mydomain.com,我不想 mydomain2.com & mydomain3.com 作为站点的 URL,我只希望他们重定向到 mydomain.com

如果我不创建规范规则,那么在访问 mydomain2.commydomain3.com 时它将失败,因为这些 TLD 没有匹配的 SSL,并且 HTTP 到 HTTPS 规则正在发送访问者HTTPS 版本没有 HTTPS 绑定的 TLD。此外,我不希望那些 URL 留在地址栏中,我希望最终域为 mydomain.com

如果我确实创建规范规则,那么我所有的子域绑定现在都将重定向到 mydomain.com,这是有问题的,因为这些是完全不同的网站被重定向。

我将 DNN 用作 CMS,所以如果您熟悉门户网站,那么这就是正在发生的所有子门户网站现在都重定向到我的父门户网站,我不希望这样。


根据 Lex Li 的要求更新

规则 1) 这里是 URL 将 HTTP 重定向到 HTTPS 的重写规则

这里的问题是我没有到我的主域的规范重定向。

<rewrite>
            <rules>
                <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
                </rule>
            </rules>
        </rewrite>

规则 2) 这是 URL 使用规范重定向 + HTTP 到 HTTPS 的重写规则

这里的问题是 subdomain.mysite.com 正在重定向到 mysite.com 不应该的地方。我看到有一个条件区域,也许有一种方法可以限制此规则,因此它不适用于我的子域?

<rewrite>
            <rules>
                <rule name="CanonicalHostNameRule1">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^example\.com$" negate="true" />
                    </conditions>
                    <action type="Redirect" url="http://example.com/{R:1}" />
                </rule>
                <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
                </rule>
            </rules>
        </rewrite>

观察:

已启用规则 1:

example.com 重定向到 https://example.com(正确)

example2.com 重定向到 https://example2.com(失败 | example2.com 上没有 SSL,它应该重定向到 example.com)

sub.example.com 重定向到 https://sub.example.com(正确)

已启用规则 2:

example.com 重定向到 https://example.com(正确)

example2.com 重定向到 https://example.com(正确)

sub.example.com 重定向到 https://example.com (失败,应该重定向到 https://sub.example.com

将规则“CanonicalHostNameRule1”修改为,

                <rule name="CanonicalHostNameRule1">
                    <match url="(.*)" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{HTTP_HOST}" pattern="^example\.com$" negate="true" />
                        <add input="{HTTP_HOST}" pattern="^sub\.example\.com$" negate="true" />
                    </conditions>
                    <action type="Redirect" url="http://example.com/{R:1}" />
                </rule>