Cloudflare 访问index.html 308重定向问题
问题现象
Hugo 生成的静态文件部署到 Cloudflare Pages 后,访问域名时会先触发对 index.html 的请求,再被 Cloudflare Pages 的 Clean URLs 特性 308 重定向到无后缀的根路径(/)—— 这是 Cloudflare Pages 对静态网站 URL 规范化的默认行为,并非错误。普通的浏览器浏览用户不会遇到这个问题,但是使用谷歌search,提交网站后,他的网页索引编制,会有个“网页会自动重定向”的提示,导致首页不会被编入索引。
举例:访问 https://www.example.com/index.html,Cloudflare会返回一个308重定向,重定向到https://www.example.com/
解决方案
在 Hugo 主题的static目录,或者静态文件目录(编译完后能映射到输出目录
public根目录),新建一个名为_redirects的文件(无后缀);在
_redirects文件中添加以下规则,强制保留 index.html 后缀且无跳转:1
2
3
4# 核心规则:访问/index.html径时,直接返回 /(无重定向)
/index.html / 200
# 若有子页面,同理:访问 /xxx/index.html 时直接返回 /xxx/
# /xxx/index.html /xxx/ 200将hugo项目同步到cloudflare,重新部署
清除 Cloudflare 缓存(Cloudflare 后台 → 缓存 → 清除缓存 → 清除所有内容);
测试:访问
你的域名或你的域名/index.html,都会直接返回 index.html 内容,状态码为 200,无 308 跳转。
其他可能的问题
站点html内容中的链接,如果采用了无index.html的方式(hugo默认方式),也要注意链接后面一定要带上反斜杠,比如”/about/“(而不是“/about”),虽然使用上没啥影响,但是也会导致Cloudflare返回一个308重定向到”/about/“上。