专栏首页ITCoder如何使用 .htaccess 强制访问 HTTPS

如何使用 .htaccess 强制访问 HTTPS

如果你为你的域名安装 SSL 证书,你的下一步应该是配置应用将所有的网络流量通过 HTTPS 传输。

不像 HTTP,请求和响应使用明文进行收发,HTTPS 使用 TLS/SSL 在客户端和服务器之间进行交互时进行加密。

使用 HTTPS 取代 HTTP 有一些优点,例如:

  • 所有数据双向加密。结果,敏感信息在被截取时不可读。
  • HTTPS 允许你使用 HTTP/2 协议,可以显著提高网站性能。
  • Google 更喜欢 HTTPS。 如果采用 HTTPS,你的网站会获得更好的排名。

转向可以在应用级别,也可以在服务器级别。本文讲解如何使用.htaccess文件将 HTTP 流量转到 HTTPS。

如果你有运行 Apache 的 Linux 服务器的 SSH root 访问权限,最好的方法是就是在域名的虚拟主机配置文件中设置转向。否则,你可以在域名的.htaccess文件中配置转向。 Apache 服务器在每页请求时,读取.htaccess文件,这将会减慢网络服务器的响应速度。

大部分控制面板,例如 cPanel允许你在图形用户界面中强制使用 HTTPS 转向。

一、使用.htaccess 将 HTTP 转向为 HTTPS

.htaccess是一个配置文件,对于 Apache webserver 服务器来说,每个目录下都可以有一份配置文件。这个文件被用来定义,Apache 如果从它所处的目录中处理文件,并且启用/禁用其他特性。

通常,.htaccess文件在域名根目录,但是你可以在子目录中定义其他的.htaccess文件。

想要将 HTTP 请求转向到 HTTPS,打开.htaccess文件,添加下面的代码:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

下面一一介绍每一行代码的用途:

  • RewriteEngine On - 启用重写能力,并且允许你使用重写规则。
  • RewriteCond %{HTTPS} off - 检查 HTTP 请求类型的连接。当条件满足时,执行下一行。我们仅仅想转向 HTTP 请求。如果你忽略这个条件,你将得到一个转向的死循环。
  • RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] - 将所有 HTTP 转向到 HTTPS,附带状态码 301(Moved Permanently)。这个规则将会将http://example.com/about转向到https://example.com/about,或者将http://www.example.com/about转向到https://www.example.com/about

如果在这个文件中,还有其他规则,请在文件顶部添加其他的重写代码。

就这样!在添加这些内容后,保存文件,并且刷新你的浏览器。所有的 HTTP 请求将会被转向到 HTTPS。

在编辑.htaccess文件时,你不需要重启服务器,因为 Apache 会在每次请求时读取这个文件。

这里是另外一个例子,更多通用规则,将 HTTP 转向到 HTTPS:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  • HTTP_HOST 是浏览者在访问网站时,请求的域名。这个变量代表你的域名。
  • REQUEST_URI 是你访问页面的 URI。

二、将所有 HTTP 转向到 HTTPS 并且 WWW 转向到 Non-WWW

任何网站都可以通过两个 URL 进行访问:带 www 前缀的(例如: www.example.com)和不带 www 前缀的(例如:example.com)。大部分网站拥有者选择其中一个版本作为自己最喜欢的域名,并且转向它。

想要将所有的 HTTP 请求转向 HTTPS,并且从 www 转向到 non-www 版本,在.htaccess文件中添加下面的内容:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

这里有两个条件。第一个检查连接是否是 HTTPS 的,并且第二个检查请求是否以 www 开头。如果其中一个条件为 true ([OR] 运算符),将会执行重写规则。

三、将所有 HTTP 转向到 HTTPS 并且 Non-WWW 转向到 WWW

如果你喜欢 www 版的网站,使用下面的规则,将请求从 HTTP 转向到 HTTPS,并且从 non-www 转向到 www。

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

四、总结

我们已经向你展示如何编辑你的.htaccess文件来将所有的 HTTP 流量转向到 HTTPS。

如果你可以访问 Apache 配置文件,为了更好的性能,你可以直接在域名的虚拟主机配置中通过创建一个301转向,来强制使用 HTTPS。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何将HTTP重定向到Apache上的HTTPS

    HTTP ( 超文本传输​​协议 )是万维网 ( WWW )上数据通信的基本协议; 通常在Web浏览器和存储Web文件的服务器之间。 而HTTPS是HTTP的安...

    子润先生
  • Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结(完整版)

    一. 简单实例介绍 一般来说,apache配置好http和https后,如果想要做http强转到https,需要设置url重定向规则,大致需要下面几个步骤即可完...

    洗尽了浮华
  • Apache 强制 HTTP 全部跳转到 HTTPS

    阳光岛主
  • 21 个非常有用的 .htaccess 提示和技巧

    Apache Web 服务器可以通过 .htaccess 文件来操作各种信息,这是一个目录级配置文件的默认名称,允许去中央化的 Web 服务器配置管理。可用来重...

    用户7657330
  • apache如何设置http自动跳转到https

    apache环境下,配置好https后,需要设置url重定向规则,使网站页面的http访问都自动转到https访问。

    WindWant
  • 如何在Debian 8上安装和配置phpMyAdmin

    phpMyAdmin是一个Web上的数据库管理工具,它提供了一个美观的GUI界面来帮助我们管理MySQL数据库。它支持多个MySQL服务器,相比于MySQL命令...

    东心木水
  • 如何在Ubuntu 14.04上安装phpMyAdmin和MySQL

    phpMyAdmin是一个Web上的数据库管理工具,它提供了一个美观的GUI界面来帮助管理MySQL数据库。phpMyAdmin支持多个MySQL服务器,相比于...

    东心木水
  • HTTP页面如何完成301重定向

    上周,本站发布了一篇名为《站长须知:HTTP迁移HTTPS时,如何避免发生重复内容问题》的文章。介绍了HTTP页面迁移到HTTPS的时候,为了避免出现重复内容的...

    企鹅号小编
  • WordPress使用腾讯云CDN配置如何实现https访问?

    最近有很多站长朋友问腾讯云CDN配置如何实现https访问?下面小编赵一八笔记以WordPress模板为例,希望能够帮到大家。

    用户7261497

扫码关注云+社区

领取腾讯云代金券