如何设置 .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
我正在使用 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