已经分别给主域名和图片域名分配了证书,现在已经可以全站 https 了,但是一个将原来文章的图片域名改成 https 太麻烦,有没有更好的办法。
https://www.logcg.com/archives/961.html 这篇文章只是介绍了 wordpress ,不知道 typecho 是否通用,另外也没找到 function.php 文件。
自从 CNNIC 颁发的子证书发生了中间人攻击这些事件之后, SSL 连接以及 HTTPS 变得越来越流行了。这时候我们从“使用 SSL 保护你的登录信息以及后台页面”变成了推荐“ SSL Everywhere ”,使用全局 SSL 加密,有效避免用户在访问网页的时候造成隐私的泄露。而且,根据谷歌站长的最新教程当中的介绍表示,使用 https 对 SEO 更有好处(国内就别想了,但谷歌的爬虫真的会更看重 Https 网站。)另外,升级到 Https ,也不需要在谷歌站长工具里做什么——支持平滑升级,唯一的缺点恐怕是收录会波动一小段时间。
谷歌支持到 HTTPS 的平滑迁移
谷歌支持到 HTTPS 的平滑迁移
这里,我们要感谢 StartSSL™ ,如果不是他们,恐怕我们这些微小站长个人博客博主就无缘 SSL 了。。
由于这个原因,落格不在使用 StartSSL 的免费证书了,而是转而使用备受关注的 Let ’ s Encrypt 项目,这样你可以很方便地获得个人免费证书。不过,如果你和我一样是把博客扔在虚拟主机,那我想你可能需要这个网站以支持虚拟主机的 cPanel 等后台配置。
对于如何申请证书这个问题,这里暂时略过不讲,总之这篇文章假定你至少拥有了一个有效签名的证书以及对应的域名。
关于 HTTPS 的那点不得不讲的事情
HTTPS 使用 443 端口来验证你的链接,通过 SSL 、 TLS 这种低层的加密技术来保证你的连接是安全的,由于 SSL 这种协议在 IP 层面上,所以建立安全握手的时候甚至还没有发生 HTTP 数据的交换,这就导致了 SSL 这个本身针对域名进行签名的证书却需求你有一个独立的 IP 地址。不过,现实很快就无情地证明—— IPv4 地址终究会被用尽。虚拟主机应运而生,这时候我们很庆幸的还能有一个独立的域名和空间,但 IP 地址却是共享的。
Web 服务器通过区分来自不同域名的请求来在同一 IP 的同一端口上提供不同的网站服务,这就导致了一个严重的问题:“ SSL 证书绑定给谁?”事实上虚拟主机确实很难支持 SSL ,一不小心就会导致同 IP 下的其他域名提示证书不正确。不过,现如今的主流浏览器都支持了一个新的协议: SNI 。
使用 SNI ,将允许 Web 服务器在同一 IP 上单独为每一个域名提供证书。
所以说,如果你想要在一个 IP 上绑定多个域名的证书,或者说你依旧使用着经济实惠的虚拟主机,想要绑定证书,那么就需要确定你的主机可以支持 SNI ——当然了,目前主流的服务器比如 Nginx 、 Apache 等都已经支持,唯独要点名的是 IIS 貌似还是不支持的。
至于浏览器, Safari 、 Chrome 、 Firefox 等知名浏览器都已经支持,要点名的是 IE 系列貌似 5678 都不太好使。
好了,扒完了背景,我们正式开始操作:
由于落格依旧是虚拟主机配置,这里我们讲如何用 cPanel 来开启 SSL :
一、开启 SSL 访问支持
登录你的 cPanel ,如果你的虚拟主机支持 SNI 技术(就看服务商给不给力了),那么你应该可以在 cPanel 面板中的“安全”分类里边找到“ SSL/TLS ”功能按钮。
“安全”分类里的“ SSL/TLS ”
“安全”分类里的“ SSL/TLS ”
点击进入之后你就会看到上传私钥公钥以及绑定域名的链接,依次进入上传之,然后选择去绑定链接里绑定自己的域名“ www ”即可。(这里要注意,如果你和落格一样使用的是一类证书,那么你应该没有资格签泛域名证书,裸域应该也是不行的。)
绑定之后,你的博客应该就已经能够使用 Https 来访问了,不过,这才刚刚开始。
二、开启访问 HTTPS 301 重定向
细心的你这时候一定会发现,你的网站这时候虽然支持了 HTTPS 访问,但是似乎也可以使用 HTTP 来访问,考虑到搜索引擎目前收录的都是你的 HTTP 链接,那么如果不做点什么的话恐怕这张 SSL 证书将会毫无用处!
我希望你的空间能够支持 .htaccess ,如果你的博客开启了伪静态的话,那八成你的空间是支持的。 :)
我们使用 .htaccess 文件来添加一个 301 重定向(其实还有其他各种迁移的办法,但是谷歌大爷官方推荐使用 301 重定向)将所有的 HTTP 流量使用 301 重定向到 HTTPS 上边去,当然,这样还有一个潜在的问题:国内百度等搜索引擎的爬虫不支持 HTTPS !
我很好奇,为什么在全世界都提倡 SSL Everywhere 的情况下,我国国内的互联网环境还是“明文走天下”,当然,这可能也跟那个“ Girl Friend Wall ”有关系吧……(不然不好和谐了啊~)所以,我们还要单独为国内的一些搜索引擎的爬虫定制一下规则,如果检测到他们的 UA ,那么就允许他们访问 HTTP 流量。
在你博客空间的 www 目录(有的可能是 public_html )下,找到 .htaccess 文件,编辑它,在里边填入下列代码:
1
2
3
4
5
#网站定制化开启 HTTPS 的 301 重定向
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_USER_AGENT} !MSIE/[1-8]\. [NC]
RewriteCond %{HTTP_HOST}
www.logcg.comRewriteRule ^.*$
https://www.logcg.com%{REQUEST_URI} [L,R=301]
对了,考虑到巨硬的 IE 大爷,我们把 12345678 都排除在外,让它们妥妥的滚去访问 HTTP 吧,省的各种警告烦心。
三、开启登录和后台的强制 SSL
虽然有了整站的重定向,但我们不妨还是将 WordPress 本身自带的功能打开,以期更完善的兼容体验——毕竟是 301 重定向。
还是找到你网站根目录里边,这次要修改的文件是 config.php ,直接在这个文件的末尾另起一行,追加两行代码:
1
2
3
/* 强制后台和登录使用 SSL */
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
四、站内链接支持
最主要的可能就是图片的问题了,你在上传到空间的附件都被 WordPress 标记为了绝对链接,而且全都妥妥的写入了 “ http://”。一般来讲,是需要用数据库替换的,不过这种方法有点小危险,我这里给你推荐另外一个不错的选择:使用代码让 WordPress 在加载附件之前将链接替换就好了!——毕竟,只是协议的问题,跟路径没有半毛钱的关系~
(我希望你使用了 WordPress 的子主题功能……)
找到当前主题下的 function.php 文件,编辑之,在里边代码的末尾追加如下代码:
1
2
3
4
5
6
7
8
/* 替换图片链接为 https */
function my_content_manipulator($content){
if( is_ssl() ){
$content = str_replace('
http://www.logcg.com/wp-content/uploads', '
https://www.logcg.com/wp-content/uploads', $content);
}
return $content;
}
add_filter('the_content', 'my_content_manipulator');
另外,除了这个大头意外,你还需要关心站内的各种内链:
修改“菜单”当中的所有“自定义链接”为相对路径;
修改“设置”→“常规”里的“站点地址”和“ WordPress 地址”为 HTTPS ;
修改其他自己手贱写入的绝对链接地址……