我正在尝试在web.config文件的<system.webServer>
部分编写一些重写规则。
我的目标是,任何错过www
部分的网址都会被重写为www.myurl.com
。我相信这实际上应该是301重定向?除此之外,我还想确保我使用SSL与HSTS。
我需要确保不将此规则修复到单个域,例如,它需要适用于foo.com
和bar.com
以及我可能选择支持的任何其他域将来(当我开始查看特定国家/地区的域名时可能会有很多)。
这是我到目前为止所做的:
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
<rule name="Non WWW redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(www|office365|bdf01)\." negate="true" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://www.{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
<outboundRules>
<rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
以上有3条规则: - HTTP到HTTPS - 非万维网到WWW - HSTS
看起来我的HTTP-HTTPS规则工作正常,但这是唯一的。
非www重定向需要能够允许特定的子域。上面的例子不应该添加www。至office365.foo.com或bdf01.foo.com的网址此部分不起作用 - 参见示例1.
我不确定如何最好地测试HSTS,但我使用的是一个名为woorank的网站来查看该网站,并说它未启用HSTS。 不确定这是否有效,但似乎不是
我不确定模式匹配在这些规则中是如何工作的,因此对于可以帮助我更好地理解这部分的资源的链接非常高兴。任何帮助将不胜感激
示例1
当我转到http://foo.com
的主页时,我应该被带到https://www.foo.com
,而我将被带到https://foo.com
。同样,如果我导航到http://office365.foo.com
我应该https://office365.foo.com
,但我仍然会获得相同的http://
地址。