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/

解决方案
  1. 在 Hugo 主题的static目录,或者静态文件目录(编译完后能映射到输出目录 public 根目录),新建一个名为 _redirects 的文件(无后缀);

  2. _redirects 文件中添加以下规则,强制保留 index.html 后缀且无跳转:

    1
    2
    3
    4
    # 核心规则:访问/index.html径时,直接返回 /(无重定向)
    /index.html / 200
    # 若有子页面,同理:访问 /xxx/index.html 时直接返回 /xxx/
    # /xxx/index.html /xxx/ 200
  3. 将hugo项目同步到cloudflare,重新部署

  4. 清除 Cloudflare 缓存(Cloudflare 后台 → 缓存 → 清除缓存 → 清除所有内容);

  5. 测试:访问 你的域名你的域名/index.html,都会直接返回 index.html 内容,状态码为 200,无 308 跳转。

其他可能的问题

站点html内容中的链接,如果采用了无index.html的方式(hugo默认方式),也要注意链接后面一定要带上反斜杠,比如”/about/“(而不是“/about”),虽然使用上没啥影响,但是也会导致Cloudflare返回一个308重定向到”/about/“上。