301使用HSTS预加载标头重定向到WWW

问题描述 投票:0回答:2

我打算HSTS预加载一个站点,并看到以下标题。没问题。有用。

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

HSTS预加载的一个条件是我还将所有HTTP流量重定向到HTTPS。为此,我使用以下说明:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

这也有效。如果它在hstspreload.org测试我的根域(example.com),我看到绿色并可以将我的域添加到预加载列表。这很好,有一点需要注意。

我想加载我的网站https://www.example.com,而不是https://example.com。这应该很容易:

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

如果它回到hstspreload.org,我收到以下错误:

响应错误:响应中没有HSTS标头。

当我进入hstspreload.org酒吧的任何子域时,我看到绿色。它只在我收到错误的根域中,因为,似乎根域不再发送HSTS头。但是,根域必须发送标头是预加载的条件。

我完成了我的作业并进行了搜索。我读过几年前的this post,但我的问题不是SEO。并且,两个重定向 - 一个从HTTP到HTTPS,一个从 - 到Google也没关系。

我有理由相信我可以进行HSTS预加载和WWW重定向。 Troyhunt.com重定向到HTTPS,然后重定向到WWW。根域也在hstspreload.org上验证。但是,我相信他使用IIS,所以问他在Apache上做些什么对我没那么帮助。

我会感激任何想法。我正在尝试,但我有点像初学者。谢谢!

.htaccess redirect http-status-code-301 hsts
2个回答
0
投票

要在重定向上包含标头,您需要添加always属性:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

我也不确定env=HTTPS何时设置 - 它可能在重定向发生后设置,所以上面不起作用?

说实话,我通常将HSTS设置放在SSL vhost中,因此它仅适用于HTTPS连接,而不是尝试使用env=HTTPS变得聪明。

如果您有多个SSL虚拟主机,那么这允许您拥有不同的HSTS - 例如,在基本域上没有includeSubDomains,但在www域上有它。如果您尚未将非www域迁移到HTTPS,这将非常有用。但是对于预加载,你必须在base和www域都有includeSubDomains,所以这可能不适用于你。


0
投票

得到它了!你所有的反馈都是现场的。我永远不会得到这个。谢谢你,巴里!

这是我的工作指示。首先,所有流量都重定向到HTTPS。然后,如果连接是HTTPS,则发送HSTS标头。正如你暗示的那样,env=HTTPS并不是真正正确的方法。然后,重定向到WWW。

RewriteEngine On

# Redirect to HTTPS
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

<If "%{HTTPS} == 'on'">
 Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</If>

# Redirect to WWW
RewriteCond %{HTTPS} off [OR,NC]
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
© www.soinside.com 2019 - 2024. All rights reserved.