我打算对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。而且,Google可以进行两次重定向-一次从HTTP重定向到HTTPS,一次从重定向到。
我很有信心可以进行HSTS预加载和WWW重定向。 Troyhunt.com重定向到HTTPS,然后重定向到WWW。根域也在hstspreload.org上进行验证。但是,我相信他使用IIS,所以问他在Apache上做什么对我无济于事。
我将不胜感激。我正在尝试,但我还是一个初学者。谢谢!
答案 0 :(得分: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,这将很有用。但是,对于预加载,您必须在基础域和www域上都拥有includeSubDomains
,因此这可能不适用于您。
答案 1 :(得分: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]