CloudFront访问S3路径报NoSuchKey错误求助
解决CloudFront无法识别S3子目录默认索引文件的问题
以下是针对你的问题的具体解决步骤:
1. 使用CloudFront函数处理子路径默认索引(推荐方案)
CloudFront的默认根对象仅对域名根路径(/)生效,无法自动处理/teeodor这类子路径的索引文件。你可以通过CloudFront函数实现路径重写:
- 登录CloudFront控制台,创建新的CloudFront函数,粘贴以下代码:
function handler(event) { const request = event.request; const uri = request.uri; // 判断路径是否为无扩展名的目录形式 if (!uri.endsWith('/') && !uri.includes('.')) { request.uri = `${uri}/index.html`; } return request; } - 将该函数发布到生产环境,然后关联到你的CloudFront分发的Viewer Request事件上,适用路径选择
/*。 - 修改完成后,触发CloudFront缓存失效(路径填
/*),确保新配置生效。
2. 切换CloudFront源为S3静态网站托管端点
如果你的场景适合使用S3静态网站托管,可以按以下操作:
- 开启目标S3存储桶的静态网站托管功能,设置索引文档为
index.html。 - 将CloudFront分发的源地址,从S3的REST API端点(如
bucket-name.s3.amazonaws.com)替换为S3静态网站的端点(如bucket-name.s3-website-[region].amazonaws.com)。 - 确保S3存储桶的权限配置允许CloudFront访问该静态网站端点(可通过存储桶策略或OAI配置)。
3. 检查缓存行为配置
确认CloudFront的缓存行为中:
- 路径模式设置为
/*,确保覆盖所有子路径。 - 未启用"限制查看器访问"等可能影响路径解析的配置,除非你有明确的访问控制需求。
验证:完成上述任一配置后,访问https://example.com/teeodor应该会自动加载对应的index.html文件。
内容的提问来源于stack exchange,提问作者ggg
相关产品推荐
相关产品推荐

