对于需要托管在 IIS 服务器上的 Angular 应用程序,我必须将完整的 URL 从 HTTP 重定向到 HTTPS。
我创建了以下规则,但它不起作用,它只适用于主域(如http://www.somedomain.com,它重定向就好了,但使用http://www.somedomain.com/route
这是我的规则。我究竟做错了什么?
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
<rule name="Angular Routes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="./index.html" />
</rule>
</rules>
这个想法是将http://www.somedomain.com/route/something或http://somedomain.com/route/something重定向到https://www.somedomain.com/route/something
你做得对,但是 IIS 有它的有线缓存,所以有时你不会立即看到更改,据我记得它以某种方式可以在 iisreset 中存活。此外,谷歌浏览器发现记住重定向。
所以建议是稍等或重新启动两台机器(我知道听起来很疯狂)
这是我的工作配置。相同的想法,但不同的条件。
有几种方法可以进行相同的重定向。如果您使用 url="https://{HTTP_HOST}/{R:1}" 必须添加 appendQueryString="true",否则将不会附加 URI 路径。
所以配置应该如下所示:
但是我通常使用另一个带有 301 重定向的规则,在某些情况下浏览器可以更好地处理它。在这种情况下,您必须使用另一种类型的 uri:url="https://{HTTP_HOST}{REQUEST_URI}"