目前,我们正在尝试在我们的web.config中设置从htttp到https的重定向,仅限于我们使用的域。但它不起作用。
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="^(?:http(?:s)?:\/\/)?(?:[^\\.]+\.)?mysite\.com(\/.*)?$" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
此规则在正则表达式编辑器中正常工作。但不是在网络服务器上。 http://rubular.com/r/3NQTozcigZ
^(?:http(?:s)?:\/\/)?(?:[^\\.]+\.)?mysite\.com(\/.*)?$
查看failedreqlogfiles pattern_match是错误的。任何见解?
在做了一些测试后,我发现这很有效。
http://sub.site.com/
但这不起作用。
http://sub.site.com/Account/Logon
答案 0 :(得分:1)
你需要正则表达式吗?如果您只是将所有流量重定向到HTTPS,那么这样的事情应该有效:
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action
type="Redirect"
redirectType="Permanent"
url="https://{HTTP_HOST}{REQUEST_URI}"
appendQueryString="false"
/>
</rule>
我倾向于使用redirectType="Permanent"
代替"Found"
,因为HTTP 301
响应通常更适合搜索引擎优化。
如果您要将网站永久性地转移到HTTPS,则可能还需要查看发送the Strict-Transport-Security
header。这将确保现代浏览器不会通过非安全连接请求您的网站。
答案 1 :(得分:1)
url
中使用的模式只会再次匹配请求的路径(并且只匹配路径,而不是网址)。
如果您想检查域名以及是否使用https,您必须依赖以下条件:
<rule name="Redirect mysite.com to HTTPS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="^OFF$" />
<add input="{HTTP_HOST}" pattern="mysite\.com$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:0}" />
</rule>
此规则将检查任何路径(logicalGrouping="MatchAll"
)上的两个条件是否为真(即.*
的用途):
mysite.com