由于之前 Vercel 的 IP 在国内被跳反炸,而且域名并未进入预加载列表,导致访问我的站点时会被跳反炸。让我意识到可能 Vercel 不再适合我了,让我产生了将博客部署到到 Cloudflare Pages 的想法。

虽然速度上来说 Cloudflare 到境内的线路质量不太理想,但胜在相对来说比较稳定,不会大规模的跳反炸页面。再加上,相信访问我博客的人应该有办法自己加速,以访问某些网站。


前提

迁移了一段时间之后,我发现访问博客的 RSS 订阅链接出现了点问题,访问 roy.wang/feed/ 时会显示首页的内容。

了解之后发现,似乎是因为安全考虑,Cloudflare 是不支持将非 index.html 的页面设置为默认页面的。而 feed 的订阅文件,一般都是 xml 文件,使用插件生成的静态文件也是 index.xml 。导致直接访问 /feed 路径会产生无默认页面的情况,然后返回主页的内容。

并且,Cloudflare Pages 似乎既不支持非 index.html 文件设置为默认主页,也不支持显示页面的.html 结尾。当你访问 /pages.html 时他会自动跳转到 /pages 显示正确的内容,但并不会显示 .html 文件的后缀,如果有知道的大佬可以留言告知一下。

解决问题

而我翻遍了文档,也并未找到官方给出解决方案,以及为何不支持此种操作的原因。但可以通过 Transform Rules 然后进行 URL 重写解决问题。

最开始时,我是想通过规则进行 301 跳转去解决这个问题的,但很多 RSS 订阅器不支持进行跳转操作获取订阅文件,所以放弃了这个想法。

既然显性跳转不行,那就不如隐性跳转。

此方法也存在局限性,即需要域名使用 Cloudflare 的DNS,如使用 CNAME 接入,理论上也是可以的。

在 Cloudflare 面板找到 Transform Rule -> Rewrite URL -> Create Rule 进行创建新的规则。具体规则参考如下:

然后保存即可,主要是设置正确需要进行转换规则的路径,以及转换后跳转的地址。

至此访问 RSS 订阅链接的错误基本解决。


《博客托管 Cloudflare Pages 后,关于 RSS 订阅链接的问题》