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

通过CloudFront访问S3时delimiter与prefix参数未生效问题求助

问题解决:CloudFront代理S3时delimiter/prefix参数不生效

问题原因

你的S3桶在eu-west-1区域,但CloudFront源用了全局S3域名(my-bucket.s3.amazonaws.com)。当请求发往全局域名时,S3会自动重定向到区域特定域名(my-bucket.s3.eu-west-1.amazonaws.com),但CloudFront默认不会把delimiter和prefix这类查询参数传递到重定向后的请求中,导致S3收到的请求没有过滤参数,返回整个桶的列表。

解决方案

方案1:改用区域特定的S3源域名

直接把CloudFront的源域名改成my-bucket.s3.eu-west-1.amazonaws.com,这样请求会直接发往区域节点,避免重定向,查询参数能正常传递给S3,过滤逻辑生效。

方案2:配置CloudFront转发所有查询字符串(如果无法修改源域名)

如果必须保留全局S3域名,需要调整CloudFront缓存行为的查询字符串设置:

  • 进入CloudFront分发的“缓存行为”配置页面
  • 找到对应的缓存行为并编辑
  • 将“查询字符串转发和缓存”设置为转发所有查询字符串,基于所有查询字符串缓存
  • 保存配置并等待CloudFront部署完成

这样CloudFront会把所有查询参数(包括delimiter和prefix)转发到S3,即使发生重定向,参数也能被正确传递。

验证

修改完成后,再次访问https://foobar.cloudfront.net/?delimiter=/&prefix=data/,检查返回的列表是否只包含data/前缀下的对象,且按/分隔显示目录结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:42:04