首页 > 解决方案 > 301 重定向到带有 HSTS 预加载标头的 WWW

问题描述

我打算 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 标头。但是,预加载的条件是根域必须发送标头。

我做了功课并搜索。我从几年前读过这篇文章,但我的问题与 SEO 无关。而且,两种重定向——一种从 HTTP 到 HTTPS,一种从 to——对 Google 来说是可以的。

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

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

标签: .htaccessredirecthttp-status-code-301hsts

解决方案


知道了!你所有的反馈都是正确的。我永远不会得到这个。谢谢你,巴里!!!

这是我的工作说明。首先,所有流量都被重定向到 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]

推荐阅读