惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
博客园 - 司徒正美
TaoSecurity Blog
TaoSecurity Blog
Martin Fowler
Martin Fowler
T
Threat Research - Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
S
Secure Thoughts
博客园 - 三生石上(FineUI控件)
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cisco Talos Blog
Cisco Talos Blog
H
Help Net Security
博客园 - 叶小钗
爱范儿
爱范儿
GbyAI
GbyAI
I
Intezer
M
MIT News - Artificial intelligence
Latest news
Latest news
Schneier on Security
Schneier on Security
T
Tor Project blog
Simon Willison's Weblog
Simon Willison's Weblog
I
InfoQ
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CXSECURITY Database RSS Feed - CXSecurity.com
罗磊的独立博客
N
News and Events Feed by Topic
T
The Blog of Author Tim Ferriss
V2EX - 技术
V2EX - 技术
B
Blog
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Security Latest
Security Latest
V
V2EX
F
Fortinet All Blogs
Forbes - Security
Forbes - Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Hacker News
The Hacker News
Scott Helme
Scott Helme
P
Privacy International News Feed
P
Palo Alto Networks Blog
H
Heimdal Security Blog
C
Cisco Blogs
T
The Exploit Database - CXSecurity.com
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
G
Google Developers Blog
W
WeLiveSecurity
L
LINUX DO - 最新话题

辰渊尘站

Subconverter 太臃肿?PHP 版轻量化替代来了! - 辰渊尘站 Astro框架Fuwari主题侧边栏添加Umami访问统计 Astro框架Fuwari主题侧边栏添加Umami访问统计 为Fuwari框架适配友链状态显示 为Fuwari框架适配友链状态显示 免费领取网易云音乐7天会员 免费领取网易云音乐7天会员 小米MiMo Token Plan免费送辣! 小米MiMo Token Plan免费送辣! Astro框架Fuwari主题实现仿hexo-abbrlink功能 Astro框架Fuwari主题实现仿hexo-abbrlink功能 观《鬼灭之刃:无限城篇 第一章 猗窝座再袭》首映有感 观《鬼灭之刃:无限城篇 第一章 猗窝座再袭》首映有感 为你anzhiyu主题的Twikoo评论系统恢复预览按钮 为你anzhiyu主题的Twikoo评论系统恢复预览按钮 山东泰安泰山游记:煌煌泰山景,谦谦君子风 山东泰安泰山游记:煌煌泰山景,谦谦君子风 安知鱼主题:修复背景图修改引发的深色模式可读性问题 安知鱼主题:修复背景图修改引发的深色模式可读性问题 安知鱼主题实现友链状态前端显示 安知鱼主题实现友链状态前端显示 我敲!优选DNS牛大了 我敲!优选DNS牛大了 安知鱼主题侧边栏添加无聊湾 安知鱼主题侧边栏添加无聊湾 从零开始使用Hexo框架搭建属于你的博客(一)环境准备篇 从零开始使用Hexo框架搭建属于你的博客(一)环境准备篇 记录下Hexo博客从本地构建迁移到Netlify,AI API Key 泄露问题与解决方案记录 记录下Hexo博客从本地构建迁移到Netlify,AI API Key 泄露问题与解决方案记录 云服务器宝塔部署Twikoo博客评论系统 云服务器宝塔部署Twikoo博客评论系统 手把手教你在Linux系统下部署MCSManager并搭建一个MC服务器 手把手教你在Linux系统下部署MCSManager并搭建一个MC服务器 为你的Twikoo添加酷安表情包 为你的Twikoo添加酷安表情包 记录一次博客评论迁移过程 记一次花嫁联名借记卡申领过程 记一次花嫁联名借记卡申领过程 为使用anzhiyu主题的博客加上十年之约进度条 为使用anzhiyu主题的博客加上十年之约进度条 有关建站一个月以来的一点点感想和后续计划 有关建站一个月以来的一点点感想和后续计划 这可能是iOS自签的版本答案,二合一LiveContainer教程来辣! 这可能是iOS自签的版本答案,二合一LiveContainer教程来辣! iOS侧载新选择!SideStore+LiveContainer,纯净无广,无限安装软件!!! iOS侧载新选择!SideStore+LiveContainer,纯净无广,无限安装软件!!! 从零开始使用Hexo框架搭建属于你的博客(零)准备篇 从零开始使用Hexo框架搭建属于你的博客(零)准备篇 Arch Linux+Hyprland从安装到使用只需这一篇(保姆级喂饭超全教程) Arch Linux+Hyprland从安装到使用只需这一篇(保姆级喂饭超全教程) - 辰渊尘站 恭喜你找到了本站的第一篇文档 恭喜你找到了本站的第一篇文档 - 辰渊尘站
记录一次博客评论迁移过程
辰渊尘 · 2025-08-20 · via 辰渊尘站

问题背景#

我使用abbrlink插件默认参数设置发现有概率为文章生成纯数字链接,例如abbrlink: 114514,然后链接转二维码的api就这样活生生炸了,我很纳闷,一般来说url不应该出现此问题,但事实就是如此,既来之则安知,修!

abbrlink是Hexo的一个插件,用来给文章生成唯一ID(短链),这样文章的链接就不会随标题变化而改变。

于是按照ai说的把abbrlink插件配置修改了下:

- permalink: posts/:abbrlink/

+ permalink: posts/p:abbrlink/

# 一个 Hexo 插件,用于根据帖子正面的标题和数据生成静态帖子链接。

# https://github.com/rozbo/hexo-abbrlink

# abbrlink config

abbrlink:

- alg: crc16 #support crc16(default) and crc32

+ alg: crc32 #support crc16(default) and crc32

rep: hex #support dec(default) and hex

drafts: false #(true)处理草稿,(false)不处理草稿。false(默认值)

# 从目录树生成类别

# 深度:要生成的目录树的最大深度应大于0

auto_category:

enable: true #true(default)

depth: #3(default)

over_write: false

auto_title: false #启用自动标题,可以按路径自动填充标题

auto_date: false #启用自动日期,它可以自动填写日期的时间今天

force: false #启用强制模式,在这种模式下,插件将忽略缓存,并为每个帖子计算abbrlink,即使它已经有了abbrlink。

这样如此链接就不可能是纯数字,ai还说老文章不受影响,我就放心改完上传了。让我没想到的是它会把老文章一起改了,进而引发了这场惨案。

问题暴露#

我一开始并没有发现,高高兴兴把昼夜切换按钮的bug修了,后面测试移动端排版的时候瞥了一眼评论区。我擦!我评论咋全没了。马上开始排查,发现最终罪魁就是 abbrlink 的配置改动导致旧链接结构不一致,评论指向的旧 /posts/7e9 变成了 /posts/p7e9,页面上匹配不到原来的评论条目。

解决思路#

于是我用Navicat连上了MongoDB,手动修改。

WARNING

在开始任何批量替换前,务必备份数据库!!!不要学我!

# 备份整个数据库

mongodump --uri="mongodb://<user>:<pass>@<host>:<port>/<dbname>" --out ./backup_2025-08-20

# 恢复示例

mongorestore --uri="mongodb://<user>:<pass>@<host>:<port>/" ./backup_2025-08-20

之后觉得效率太低了,去学习了下SQL查询的语法(技能+1)

写了个简易替换脚本:

var oldSlug = "7e9"; // 替换前

var newSlug = "p7e9"; // 替换后

db.comment.updateMany(

{

$or: [

{ url: { $regex: "/posts/" + oldSlug } },

{ href: { $regex: "/posts/" + oldSlug } }

]

},

[

{

$set: {

url: { $replaceOne: { input: "$url", find: "/posts/" + oldSlug, replacement: "/posts/" + newSlug } },

href: { $replaceOne: { input: "$href", find: "/posts/" + oldSlug, replacement: "/posts/" + newSlug } }

}

}

]

)

替换效率更高一点,同一篇文档下所有评论都可以一键替换,还好我文章发的不多,除去学习发现时间,替换就花了5分钟的样子,完美解决。

经验总结#

  • 先备份,再动手(重要且不重复)。
  • 在生产库上做批量修改前,先在测试或少量样本上验证。
  • 修改链接/路由时要意识到可能影响历史数据(评论、外链、SEO 等),最好在改动前做影响评估与回滚计划。

数据无价心莫轻,链接改动慢思量,评论全失才明白,操作谨慎方安康。