【问题标题】:IIS10 UrlRewrite, multiple canonical TLD's & non-canonical sub-domains + HTTPSIIS 10 Url Rewrite,多个规范 TLD 和非规范子域 + HTTPS
【发布时间】:2021-02-06 19:39:57
【问题描述】:

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

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

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

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

顶级域名

mydomain.com

mydomain2.com

mydomain3.com

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

子域

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.commydomain3.com 作为网站的网址,我只希望他们重定向到mydomain.com

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

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

我使用 DNN 作为 CMS,所以如果您熟悉门户,那么所有子门户现在都重定向到我的父门户,我不希望这样。


根据 Lex Li 的要求更新

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

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

<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 重写规则 WITH canonical redirect + HTTP to 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

【问题讨论】:

  • 您能否编辑并显示您现在设置的规则以及观察到的到完整 URL 重定向的完整 URL 看起来不太好?只有这样才能成为可以回答的问题,或者你最好聘请顾问进一步讨论。
  • @LexLi 代码隐藏添加

标签: subdomain dotnetnuke iis-10 url-rewrite-module canonicalization


【解决方案1】:

将规则“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>

【讨论】:

  • 所以我有以编程方式为sub.example.com 添加的绑定,我必须在此规则中添加子域还是可以使用*.example.com 之类的通配符?
  • 我试过&lt;add input="{HTTP_HOST}" pattern="^*\.example\.com$" negate="true" /&gt;,但没用。
  • @UserSN 请多学习一点正则表达式。应该是^(.*)\.example\.com$
猜你喜欢
  • 2013-08-14
  • 2013-12-02
  • 2011-08-04
  • 2018-09-17
  • 2021-06-13
  • 2017-08-05
  • 2012-05-22
  • 1970-01-01
相关资源
最近更新 更多