由于本站的所有图片均存储在Github,之前一直都是用jsDelivr的CDN来作为静态资源服务器(主要是免费、超快),结果前段时间发现来自Github的文章插图均已失效,通过搜索得知原来是2021年12月20日jsDelivr在大陆的CDN节点被关闭,而且ICP备案已经被注销,在2022年4月28日又遭到DNS污染,自此大陆无法正常访问jsDelivr,从而导致大批网站工作失常,很不幸我的小破站就是其中一个~
据说很多小伙伴的博客还因为缺失CSS文件直接导致网站排版错乱。
那么这种问题该如何解决呢?我找到了几种办法:
解决办法
使用cdn.jsdelivr.net未受污染的子域
子域名 | 提供来源 |
---|---|
fastly.jsdelivr.net | 由 Fastly 提供 |
gcore.jsdelivr.net | 由 G-Core 提供 |
testingcf.jsdelivr.net | 由 CloudFlare 提供 |
国内的云存储/资源库
资源平台 | 备注 |
---|---|
七牛云 | 域名需要备案 |
又拍云 | 域名需要备案 |
阿里云 | 域名需要备案 |
多吉云 | 域名需要备案 |
本地存储
将所有资源下载后存储到本地空间/服务器。
方案选择
第一种最为简单,只需将博客中所有的文件中的cdn.jsDelivr.net替换为子域名即可;
第二种对于我来讲弊端相当明显,那就是域名需要备案,直接放弃;
第三种是将所有文件存储到本地端,然后替换为本地路径,但是把所有文件存储到本地相应就会增加空间占用。
最终决定选择简单的,第一种
直接替换博客中的域名,那么全站那么多文章一篇一篇修改那不是慢且麻烦,如何批量修改文章中那么多的图片地址呢?
phpMyAdmin管理工具
由于本站使用虚拟主机,所以可以登录数据库管理phpMyAdmin进行修改。
首先我们需要确定要更换的地址,比如原本使用的地址是https://cdn.jsdelivr.net/gh/@用户名/仓库名/文件夹名/文件名.jpg
,那么只需要批量将原本的https://cdn.jsdelivr.net/gh/@用户名/仓库名/文件夹名
修改为https://gcore.jsdelivr.net/gh/@用户名/仓库名/文件夹名
即可。
打开数据库管理工具,选择Typecho的数据库,选择typecho_contents表,点击SQL,执行下列sql语句。
/* 更改文章内图片 */
UPDATE typecho_contents SET text = REPLACE(text,'旧域名地址','新域名地址');
/* 更改封面图片 */
UPDATE typecho_fields SET str_value = REPLACE(str_value,'旧域名地址','新域名地址');
执行后即显示批量更改成功,此时就可以回到博客的文章中查看图片链接是否正确、图片是否正常显示了~
知识延伸
修改 typecho_options 表
将网站的设置里的域名替换成新的域名:
UPDATE `typecho_options` SET `value` = '新域名地址' WHERE `typecho_options`.`name` = 'siteUrl' AND `typecho_options`.`user` =0;
修改 typecho_users 表
将管理员的个人网站进行替换:
UPDATE `typecho_users` SET `url` = REPLACE(`url`,'旧域名地址','新域名地址');
修改 typecho_comments 表
对评论中的管理员的域名,和评论中的旧域名进行替换:
UPDATE `typecho_comments` SET `url` = REPLACE(`url`,'旧域名地址','新域名地址');
UPDATE `typecho_comments` SET `text` = REPLACE(`text`,'旧域名地址','新域名地址');
如果使用域名邮箱也可以进行更换:
UPDATE `typecho_comments` SET `mail` = REPLACE(`mail`,'旧域名地址','新域名地址');
评论