如何在htaccess中强制在www之前使用https

how to force https before www in htaccess

我正在尝试最终确定 HSTS 合规性,我是一名网络专家,但这超出了我的理解范围。

我当前的 .htaccess 是:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{ENV:HTTPS} !on [NC]
  RewriteRule ^(.*)$ https://www.example.com/ [R,L]
</IfModule>

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

我正在使用:https://hstspreload.org/ 检查合规性,当我 运行 这个工具用于我的域时 returns:

在添加 www 子域之前,

http://example.com (HTTP) 应立即重定向到 https://example.com (HTTPS)。现在,第一个重定向是 https://www.example.com/。需要额外的重定向以确保任何支持 HSTS 的浏览器都将记录顶级域的 HSTS 条目,而不仅仅是子域。

如何先强制使用 https?

多个重定向是可以的,但我想确保 https 是第一个。

您可以像这样进行重定向:

RewriteEngine On
RewriteBase /

# http -> https keeping same domain
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L]

# then add www while keeping it https
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L]