.htaccess - 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 上做什么对我帮助不大。
我会很感激任何想法。我正在尝试,但我有点初学者。谢谢!
解决方案
知道了!你所有的反馈都是正确的。我永远不会得到这个。谢谢你,巴里!!!
这是我的工作说明。首先,所有流量都被重定向到 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]
推荐阅读
- python - 在 gremlin 中仅将值提取为 csv 格式
- python - 过滤字符串列表并返回一个仅包含您朋友姓名的列表
- swift - 如何使用 SwiftUI 在 TabView 中禁用垂直滚动?
- swift - 如何从 tableViewCell 执行函数?
- css - Bigcartel 整洁的主题
- python - 用进度条复制文件?
- python - 我想使用字典函数计算字母的数量并排序
- swift - Swift 字符串和 [Character]
- python - 如何使用 python http.server 将 CSS 样式添加到 HTML 文件?
- google-chrome - 如何避免使用 chrome 进行硬件加速的颜色偏移