如何设置 .htaccess 以将 HTTP 重定向到等效的 HTTPS?

How to set up .htaccess to redirect HTTP to HTTPS equivalent?

我正在使用 Dreamhost 并拥有安全托管和安全证书。我正在尝试将普通 HTTP 站点重定向到 HTTPS 站点。我有点困惑。

我想让 http://www.example.com/ 重定向到 https://www.example.com/

我应该在哪个文件中放入什么才能使其正常工作?

这应该有效。当您指出 .htaccess 这个概念与 Apache 重写规则有关时:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

只需将其放入您的 .htaccess 文件中,所有 non-HTTPS 请求都将定向到 HTTPS。

测试这个的方法是像这样使用 curl;当然更改 http://www.example.com 以匹配您的实际域 name/host 名称。:

curl -I -L http://www.example.com

-I 标志告诉 curl 仅发送回 headers,-L 告诉 curl 遵循重定向。如果 .htaccess 设置正确,那么您将看到 non-HTTPS 站点的第一跳,然后是重定向(由 .htaccess 重写规则管理)将其发送到下一跳HTTPS 站点。

301 与 302 重定向。

关于服务器响应消息和潜在 SEO 内容的一个小注释:当您使用如图所示的最终 Apache 重写规则时,默认服务器响应代码将是:

HTTP/1.1 302 Found

A 302 HTTP response is considered a temporary redirect. If you absolutely, positively always want plain-HTTP traffic to go to the HTTPS equivalent on the same server, you should be sending out a 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

一切都应该很好。但是——不要跳进一个奇怪的兔子洞——Google 似乎明白大多数人错误地发送了 302 headers 而他们的意思是 301,所以它似乎是——according to this article——Google 302 重定向因素加上某种时间范围。如果您在一段时间内发送了足够多的 302,Google 将推断更改是永久性的并将 302 视为 301。

有点令人困惑,但归根结底,如果您想让重定向永久化,那么始终设置 301 响应 headers 以使每个人的生活更轻松。

在您的 .htaccess 中,输入:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.boy.com/ [R=301,L]

您只需要确保您的 apache 站点定义也在为 https

侦听端口 443