【问题标题】:How to set up .htaccess to redirect HTTP to HTTPS equivalent?如何设置 .htaccess 以将 HTTP 重定向到等效的 HTTPS?
【发布时间】:2016-03-19 09:39:36
【问题描述】:

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

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

我应该在什么文件中放什么才能让它工作?

【问题讨论】:

标签: html .htaccess dreamhost


【解决方案1】:

这应该可行。当您指出 .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 响应标头以使每个人的生活更轻松。

【讨论】:

    【解决方案2】:

    在您的 .htaccess 中,输入:

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

    您只需要确保您的 apache 站点定义也在侦听 https 的 443 端口

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2018-06-25
      • 2013-12-08
      • 2016-08-31
      • 1970-01-01
      • 2016-11-08
      相关资源
      最近更新 更多