微魔在很早很早以前就一直在站点儿里吹逼SSL安全证书的重要性(穿越查看,揭穿微魔的谎言),到了2016年,伴随着LetsEncrypt、沃通的免费SSL的普及(此二者做到了StartSSL经营多年都没有做到的事情),安全证书(或者https安全协议)再也不是电子商务网站专属的标签了,个人博客已经开启了新一轮的技术革命(也可以理解为技术宅的ZUO)。
微魔之前分享了不少关于Letsencrypt的SSL的教程(传送),现在自己也在用。但是由于博客开博时间比较早(2011年),所以在开启SSL之前,相当数量的文章里面的插图还是http的引用,本来也没什么,但是在火狐上总会显示成黄色感叹号的小锁头,而非正常情况下的绿色锁头。作为重度的强迫症患者,微魔不得不全网搜寻解决方案。
一个治标不治本的方案是在主题的function.php文件中加入字符替换语句,这样读者在每次访问的时候会相应的把图片的http链接替换为https,而数据库的原始内容不变;另外,更根本的解决方案是,直接从SSH进入MySQL(微魔用的是MariaDB),用SQL语句替换。后者虽然能够长久解决问题,但对于不熟悉SQL的同学请谨慎操作。下面就这两个方法本文做简单介绍:
1.通过主题的function.php文件来批量替换
在主题文件的function.php(WP后台“外观”-“编辑”右侧可以找到)里加入如下代码(注意域名需要做相应修改)
function replacehttp($content){ if( is_ssl() ){ $content = str_replace('http://www.域名.com/wp-content/uploads', 'https://www.域名.com/wp-content/uploads', $content); } return $content; } add_filter('the_content', 'replacehttp');
2.通过SQL语句进行正文的批量替换
操作前请务必对数据库进行备份(教程),以避免不可挽回的数据丢失!
登入MySQL或MariaDB(登录方法参见以前的教程)
a.切换到WP数据库(把下文的VMVPS换成你自己的),不确定的话可以用“show databases;”命令查看当前有哪些数据库
USE VMVPS
b.运行如下语句批量替换(域名及路径替换称自己的)
UPDATE wp_posts SET post_content = replace(post_content, 'https://www.vmvps.com/wp-content/uploads','https://www.vmvps.com/wp-content/uploads');
运行只要没有报错就可以查看效果了,注意:以上两者选择其中一个就可以,如果你不熟悉SQL操作就选1,但由于每次页面访问都要运行函数(已做静态缓存除外),因此会有一定性能损失;如果对SQL比较熟悉,就可以用2,一劳永逸。
直接不标记 http 或 https 最好,使用两个斜杠就可以了,例如:
//www.vmvps.com/wp-content/uploads
感谢提示。
首先谢谢分享呢,感觉iCodex 说的很有道理呢。
他说的比我的方法好~
示例怎么都是https的链接。。。不太对吧
哦,感谢提醒,修改了
竟然是因为我改了数据库的时候把这个改了。。。
666 这个误会可大了
为什么我照着第一种方法改,不行呢
WordPress更新的原因吧。用第二种方法吧,一劳永逸
图片不能上传,用这个方法没用啊
图片不能上传应该不是这个问题吧