去年升级了博客:Hexo 升级 & 优化,近期才发现有些 Tag 404。
但是 hexo s 本地运行的正常打开的,我看了下 Cloudflare pages 的发布日志。
判断应该是平台机制问题,生成的文件都是 java 而非预期的 Java。
于是问了下模型:
- 问题:这是 Cloudflare Pages 的一个已知机制/行为。
- 解决:通过 hexo 的配置,把 URL 都调整为小写( 可能会影响 SEO )
原因解析
Cloudflare Pages 在部署静态资源时,其底层路由系统(以及预設的 Assets 引擎)在处理 URL 和文件路径时,默认是不区分大小写(Case-Insensitive)或者会执行规范化(Normalization)的。
在 Hexo 中,如果你创建了 Tag 为 Java,Hexo 默认生成的目录结构是 /tags/Java/index.html。但 Cloudflare Pages 在处理路由匹配或文件同步时,往往会强制将路径重写为小写(java),或者对大小写敏感的路径做了规范化路由重定向,这就导致访问原始带大写字母的 URL(例如 /tags/Java/)时触发 404 或重定向循环。
社区中许多使用 Hexo、Hugo 等静态博客引擎并部署在 Cloudflare Pages 上的开发者都遇到过此类分类/标签(Tag/Category)包含大写字母导致路径失效的问题。
解决方案
处理这个问题的根本原则是:在 Hexo 侧统一将 URL 生成策略调整为全小写(Case-insensitive Slugs)。
修改配置文件的 filename_case 开关:
1 | # 1 表示将生成的 filename / slug 强制转为小写 (Lower case) |