You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ACM、CloudFront与NameCheap时带URL路径的网站访问失败

解决CloudFront+S3单页应用路由的NoSuchKey错误

看起来你碰到的是单页应用(SPA)在CloudFront+S3架构下的典型路由问题,我来帮你一步步解决:

问题根源

当你直接访问https://xyz.online/home或者刷新这个页面时,CloudFront会默认去S3存储桶里找名为home的对象文件,但你的网站是单页应用——所有路由都是前端框架(比如React、Vue)在浏览器端处理的,S3里根本不存在home这个文件,只有index.html这一个入口文件,所以就会返回NoSuchKey错误。

解决方案

1. 配置CloudFront自定义错误响应(核心步骤)

这是解决问题的关键,让CloudFront在遇到404错误时返回你的index.html,交给前端路由处理:

  • 打开CloudFront控制台,找到你的分发配置
  • 切换到错误页面标签页
  • 点击「创建自定义错误响应」,填写以下参数:
    • HTTP错误代码:选择404 Not Found
    • 自定义错误响应:勾选「是」
    • 响应页面路径:输入/index.html
    • HTTP响应代码:选择200 OK
  • 保存配置后,等待CloudFront完成分发更新(通常需要10-15分钟,别着急)

2. 完善S3存储桶的静态网站设置

虽然你已经设置了默认根对象,但建议同步配置S3的错误文档:

  • 进入S3控制台,打开xyz.online存储桶的「静态网站托管」设置
  • 在「错误文档」栏填写index.html
  • 保存设置,这能给S3本身的请求也加上一层兜底保障

3. 检查CloudFront缓存行为

确保你的缓存行为配置正确,不会干扰路由:

  • 回到CloudFront分发的「缓存行为」标签页
  • 确认针对/*路径的缓存行为中,默认根对象是index.html
  • 如果你的前端路由依赖特定请求头,记得在缓存行为里配置转发这些头部,避免错误缓存路由请求

完成这些配置后,再去测试直接访问https://xyz.online/home或者刷新页面,应该就能正常加载对应的前端路由页面了。

内容的提问来源于stack exchange,提问作者Mandeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:42:52