无法使用 web.config 为 IIS 正确重定向
Trouble getting redirects right using web.config for IIS
好的,这里有一个奇怪的重定向问题。我有 3 个域名,所以我们将它们命名为以下
maindomain.com
aliasdomain.net
aliasdomain.org
我们在 windows 2016 服务器上通过 IIS 使用 Let's Encrypt for https。
我们想要的是任何时候有人在 3 个域中的任何一个键入或 www 都重定向到域名 www.maindomain.com
因为 let's encrypt 证书不是创建 www.域别名的版本给我们带来了一些困难。这是我们正在使用的 web.config 规则,但它们不起作用。
<rule name="Redirect to WWW" enabled="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\." negate="true" />
</conditions>
<action type="Redirect" url="https://www.{HTTP_HOST}{HTTP_URL}" redirectType="Permanent" appendQueryString="false" />
</rule>
<rule name="Redirect to HTTPS" enabled="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="OFF" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{HTTP_URL}" redirectType="Permanent" appendQueryString="false" />
</rule>
结果如下
这有效
www.maindomain.com 工作并重定向到 https://www.maindomain.com
maindomain.com 工作并重定向到 https://www.maindomain.com
这不起作用,奇怪的是显示了标准的 IIS 登录页面
aliasdomain.net 不起作用重定向到 http://www.aliasdomain.net
www.aliasdomain.net 不起作用并重定向到 http://www.aliasdomain.net
这个根本不起作用
aliasdomain.org 不起作用重定向到 https://www.aliasdomain.org
www.aliasdomain.org 不起作用并重定向到 https://www.aliasdomain.org
不知道如何让它做我们想做的事。您会认为将任何版本的任何域名重定向到 https://www.maindomain.com
并不困难
在此感谢您的帮助。
The problem with your rule is that you are using {HTTP_HOST} in your
redirect action.This parameter will take the incoming hostname from
the request.I think that is not what you want. <action
type="Redirect" url="https://{HTTP_HOST}{HTTP_URL}"
redirectType="Permanent" appendQueryString="false" />
Please try below rule. It redirects if the hostname does not match
www.maindomain.com ,also enforce https
<rule name="CanonicalHostNameRule1" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="^www\.maindomain\.com$" negate="true" />
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://www.maindomain.com/{R:1}" />
</rule>
好的,这里有一个奇怪的重定向问题。我有 3 个域名,所以我们将它们命名为以下
maindomain.com
aliasdomain.net
aliasdomain.org
我们在 windows 2016 服务器上通过 IIS 使用 Let's Encrypt for https。
我们想要的是任何时候有人在 3 个域中的任何一个键入或 www 都重定向到域名 www.maindomain.com
因为 let's encrypt 证书不是创建 www.域别名的版本给我们带来了一些困难。这是我们正在使用的 web.config 规则,但它们不起作用。
<rule name="Redirect to WWW" enabled="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\." negate="true" />
</conditions>
<action type="Redirect" url="https://www.{HTTP_HOST}{HTTP_URL}" redirectType="Permanent" appendQueryString="false" />
</rule>
<rule name="Redirect to HTTPS" enabled="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="OFF" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{HTTP_URL}" redirectType="Permanent" appendQueryString="false" />
</rule>
结果如下 这有效 www.maindomain.com 工作并重定向到 https://www.maindomain.com maindomain.com 工作并重定向到 https://www.maindomain.com
这不起作用,奇怪的是显示了标准的 IIS 登录页面 aliasdomain.net 不起作用重定向到 http://www.aliasdomain.net www.aliasdomain.net 不起作用并重定向到 http://www.aliasdomain.net
这个根本不起作用 aliasdomain.org 不起作用重定向到 https://www.aliasdomain.org www.aliasdomain.org 不起作用并重定向到 https://www.aliasdomain.org
不知道如何让它做我们想做的事。您会认为将任何版本的任何域名重定向到 https://www.maindomain.com
并不困难在此感谢您的帮助。
The problem with your rule is that you are using {HTTP_HOST} in your redirect action.This parameter will take the incoming hostname from the request.I think that is not what you want.
<action type="Redirect" url="https://{HTTP_HOST}{HTTP_URL}" redirectType="Permanent" appendQueryString="false" />
Please try below rule. It redirects if the hostname does not match www.maindomain.com ,also enforce https
<rule name="CanonicalHostNameRule1" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="^www\.maindomain\.com$" negate="true" />
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://www.maindomain.com/{R:1}" />
</rule>