amazon-web-services - 在使用 S3 REST API 端点时为 CloudFront 设置错误页面
问题描述
我有一个 CloudFront 分配,它指向一个保存我网站静态内容的 S3 存储桶。这是使用 S3 REST API 端点完成的,因此源的域名和路径如下所示:
bucket-name.s3.amazonaws.com
到目前为止,这是有效的,我知道这一点,因为当我打开浏览器并输入https://xxxxxxxxxxxxx.cloudfront.net/index.html
时,它会下载 html 文件。但这不是我所追求的全部。我的网站是一个用 React 编写的 SPA(单页应用程序)。这意味着并非客户端代码中提到的所有资源实际上都可以在存储桶中找到。那些在存储桶中物理上不可用的资源是虚拟资源,应该由客户端代码处理。
为此,如果用户在浏览器中输入虚拟 URL 的地址,服务器首先需要验证该资源是否存在。如果没有,服务器应该返回index.html
文件而不是 404 错误。这可以在 CloudFront 的错误页面中进行设置。
因此,我为处理所有 404 错误的 CloudFront 分配创建了一个客户错误响应,返回index.html
具有 200 ok 状态的文件。但这不起作用。
当输入 URLhttps://xxxxxxxxxxxxx.cloudfront.net/virtual-url
时,它返回:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>39E3967AA5F16693</RequestId>
<HostId>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</HostId>
</Error>
即使是裸 URL 也会https://xxxxxxxxxxxxx.cloudfront.net
返回完全相同的错误。
所以我的问题是,当分配使用 S3 REST API 端点时,如何使用 CloudFront 的错误页面?
PS 当我使用 S3 的静态网站端点 ( bucket-name.s3-website.us-east-1.amazonaws.com
) 时,同样的机制起作用。
解决方案
推荐阅读
- javascript - 为什么在 head 元素中使用匿名函数?
- jquery - 必填字段在 Select2 选择框中不起作用
- sql-server - SQLLab - Apache Superset 中是否允许 CTE?
- react-native - 当我在 QR 中触摸时如何隐藏底部选项卡,(我的 QR 图标选项卡无法完全隐藏,因为它比选项卡栏大)
- ohif - 使用 OHIF Embedded Viewer 时如何直接加载研究
- ios - 无法使用远程框架创建 Cocoapod 依赖项
- r - 有没有办法在 R 中为 stringr 使用逆模式?
- xamarin.forms - 以编程方式将内容添加到 TabView Xamarin 表单中的 TabViewItem
- python - 我如何使用没有任何标签的简单请求?
- plc - 如何在 TwinCat3 中保存整数变量的值?