这应该可行。当您指出 .htaccess 时,该概念与 Apache 重写规则有关:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
只需将其放在您的 .htaccess 文件中,所有非 HTTPS 请求都将被定向到 HTTPS。
你可以测试这个的方法是像这样使用curl;当然更改http://www.example.com 以匹配您的实际域名/主机名。:
curl -I -L http://www.example.com
-I 标志告诉curl 只是发回标头,-L 告诉curl 遵循重定向。如果您正确设置了 .htaccess,那么您将看到到非 HTTPS 站点的第一个跃点,然后由 .htaccess 重写规则管理的重定向将其发送到 HTTPS 站点上的下一个跃点。
301 与 302 重定向。
关于服务器响应消息和潜在 SEO 内容的一点小提示:当您使用如图所示的最终 Apache 重写规则时,默认服务器响应代码将是:
HTTP/1.1 302 Found
302 HTTP response 被视为临时重定向。如果您绝对肯定总是希望纯 HTTP 流量转到同一服务器上的 HTTPS 等价物,您应该发送一个 301 HTTP response,这是一个永久重定向。要使用 Apache 重写规则发送 301 代码,只需调整最后一行,使其看起来像这样:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
这样做之后,响应应该是:
HTTP/1.1 301 Moved Permanently
一切都应该很好。但是——而不是跳进一个奇怪的兔子洞——谷歌似乎明白大多数人错误地发送了 302 标题,而他们的意思是 301,所以看起来——according to this article——谷歌考虑了 302 重定向加上某种时间范围。如果您在一段时间内发送了足够多的 302,Google 会推断更改是永久性的,并将该 302 视为 301。
有点令人困惑,但归根结底,如果您的意思是永久重定向,那么总是设置 301 响应标头以使每个人的生活更轻松。