apache - HSTS 和重定向
问题描述
我在这里https://hstspreload.org测试我的网站,我收到了这个错误:
错误:HTTP 首先重定向到 www
http://example (HTTP) 应 在添加 www 子域之前立即重定向到https://example (HTTPS)。现在,第一个重定向是https://www.example。需要额外的重定向以确保任何支持 HSTS 的浏览器都会记录顶级域的 HSTS 条目,而不仅仅是子域。
据我所知,有效的重定向应该以这种方式完成:
- http://example(这是用户在地址栏中输入的内容)
- https://example(第一次重定向,到 HTTPS)
- https://www.example(第二次重定向,到子域 www)
目前,这是我htaccess
导致重定向的代码:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
是否可以/建议在此处插入另一个重定向?有没有风险?
任何评论/建议/建议/烂番茄表示赞赏:-)
解决方案
评论摘要:
- httpd.conf 和 .htaccess 中的配置从上到下阅读。
- 对于 RewritRules,它们按顺序应用,从上到下,直到到达最后一个。应用符合条件的所有规则。
- 为防止这种情况,您可以将
[L]
标签添加到 RewriteRule。这个标签告诉 Apache,如果它匹配条件,它是最后应用的规则。此请求将忽略所有其他规则。
这里的重写顺序是:
- 客户请求
http://example.com
- RewriteRule 将客户端重定向到
https://example.com
- 客户回来了
https://example.com
- 第二个 RewriteRule 将客户端重定向到
https://www.example.com
- 客户回来了
https://www.example.com
- 不适用 Rewriterule,Apache 响应请求。
为什么要这样做?它涵盖了所有情况。如果客户端的第一个请求已经是https://example.com
,上面的场景将从第 4 步开始。
示例配置可能如下所示:
Listen *:80
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
[... OTHER CONFIGURATION ...]
</VirtualHost>
Listen *:443
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
[... OTHER CONFIGURATION ...]
</VirtualHost>
推荐阅读
- azure - 错误:错误:无法将 Web 包部署到应用服务。错误请求(代码:400)
- javascript - 当测验答案正确或不正确时,将类添加到 DIV 元素
- r - R函数将所有二进制值为0的行转换为NA,用于一组多列
- swift - 功能总是黑色,为什么?
- pandas - 将apply()函数应用于熊猫中的多个列?
- c++ - 构建分析:CMake/ninja 可以为每个编译单元生成编译时间日志吗?
- ios - iOS Admob 打开应用程序广告问题,下方有黑色背景
- flutter - 尽管设置为颤动,但图像未显示
- git - 全局 .gitconfig 文件可以嵌套多层吗?
- graphviz - 标签点语言Graphviz之间的布局问题