Typecho博客图床CDN变更后如何批量更换全站博文插图链接
侧边栏壁纸
  • 累计撰写 30 篇文章
  • 累计收到 13 条评论

Typecho博客图床CDN变更后如何批量更换全站博文插图链接

怪怪的科长
2023-03-20 / 0 评论 / 41 阅读 / 正在检测是否收录...

  由于本站的所有图片均存储在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`,'旧域名地址','新域名地址');
0

评论

博主关闭了所有页面的评论