全站启用 HTTPS 啦!
这是一篇旧文,其中的内容可能已经过时。
为了跟上 HTTPS 的大潮流,以及防止流量劫持、运营商广告等,我把整个站点迁到了 HTTPS。站点规模很小,所以过程不算复杂,权且记录步骤:
-
SSL 证书是在 StartSSL 上申请的免费个人版,申请完之后会得到一些文件和一份安装教程。免费版只支持一级域名和 www 二级域名,如想支持所有子域名,需要付费升级证书;
-
我的服务器是 Apache(其它服务器按照安装教程来),需要先启用
mod_ssl
模块,然后在%mysite%.conf
中添加 443 端口支持。 -
接着,着手把所有的 HTTP 请求重定向至 HTTPS。
- 在
.htaccess
文件中添加:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://handsomeone.com/$1 [L,R=301,NC] </IfModule>
- HSTS,全称 HTTP Strict Transport Security。浏览器在接收到这个报头之后,在
max-age
秒数内,会直接在内部把 HTTP 请求转化为 HTTPS 请求,而不需要任何网络传输,从而减轻服务器压力。
<ifModule mod_headers.c> Header set Strict-Transport-Security "max-age=31536000" </ifModule>
- WordPress 支持在
wp-config.php
里定义一个参数,开启后强制使用 HTTPS 登录后台。
define('FORCE_SSL_ADMIN', true);
- 在
-
前几步做完之后,别忘了重启 Apache。至此服务器上的配置就做完了。
-
下面,进入 WordPress 仪表盘 -> 设置 -> 常规,把 WordPress 地址和站点地址都加上
https://
。 -
结束了?还差一点。在一个 HTTPS 页面内容中出现 HTTP 图片、资源文件、
iframe
等,浏览器会认为这是不安全的。所以这一步就要把所有内容中的资源替换为 HTTPS。可以先批量替换所有博文中的http://
字样:
UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, 'http://', 'https://')
然后如有遗漏,或者外部资源不支持 HTTPS,再手动修改。