如何在AWS CloudFront中配置查询参数

24

我有一个AWS CloudFront在S3存储桶之前,该存储桶包含我的前端应用程序(https://myapp.com)。当我通过网站的导航元素(在此情况下是按钮)转到 https://myapp.com/experts?profession=carpenter 时,一切正常。但是当我尝试通过在浏览器的导航栏中手动输入URL来访问相同的URL时,问题就会出现。查询参数会消失,在导航栏中只显示以下URL而没有查询参数 https://myapp.com.com/experts

我的问题是,我应该如何配置AWS CloudFront以允许我传递查询参数?

非常感谢!


1
附注:一些查询字符串参数被S3保留,新的参数可能会导致您的应用程序出现问题,因为它们不是为S3而设计的,但它将尝试解释任何匹配的参数。在此处使用的常见单词示例包括“location”和“select”,如果在此处使用这些单词,将会破坏您的应用程序。建议如果您要这样做,请以“x-”开头命名您的参数,但不要以“x-amz”开头,例如“?x-profession=carpenter”可能更具有未来性(尽管,“profession”似乎是S3将来不太可能需要的一个词)。 - Michael - sqlbot
2个回答

24

2
现在(2021年12月),根据@lahiru-chandima的回答,AWS有一种不同的管理方式。 - emaV

22

现在,AWS 有一种不同的设置方式,默认选中。Sébastien 在他的答案中提到的方法被标记为“传统的缓存设置”。

输入图片描述


2
@ChauGiang 将原始请求策略设置为“所有查看者”就足以保留查询参数,但如果您提供不需要缓存的动态内容,则将缓存策略设置为“禁用缓存”也是有意义的。 - Lahiru Chandima
3
除了上述内容之外,我还必须在所请求的资源后面包含一个斜杠。因此,我不得不使用.../newsletter/verify/?id=1234而不是.../newsletter/verify?id=1234。我相信这与S3如何解析资源路径有关,但我欢迎更具体的解释。 - Josh Weston
@Lahiru Chandima 所以针对我的使用情况,我需要根据查询参数缓存内容(主要是HTML页面)。在旧的设置中,我只需选择“全部转发,基于全部缓存”选项。现在正确的方式是什么? - EternalObserver
@JoshWeston,我有类似的需求,我需要使用斜杠(/)重新编写查询语句。你有什么解决方案吗? 顺便说一下,上面的解决方案只适用于默认缓存行为。我想为特定路径/创建创建自定义缓存行为-->指向S3源。 - fayas_akram
这个答案是不正确的,因为它禁用了所有缓存。因此,您需要创建一个自定义缓存策略来基于查询字符串进行缓存。我建议还创建一个自定义请求策略来匹配;AllViewer转发所有标头、所有查询参数等。评论中没有足够的空间来提供更多细节。如果您不想创建自定义策略,请使用传统选项并遵循接受的答案。 - Felix Livni
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接