amazon-web-services - 无法让 index.html 在嵌套文件夹中的 AWS S3 静态站点上默认工作
问题描述
我将 AWS S3 与 CloudFront 一起使用,在存储桶的嵌套子文件夹中托管静态网站。例如,我设置了一个my-domain.com
带有子文件夹的存储桶,/path/to/site/
其中包含一个index.html
文件。在桶的设置中my-domain.com
,静态网站托管是enabled
,托管类型是Host a static website
,索引文档和错误文档都设置为index.html
。
当我加载时my-domain.com/path/to/site/index.html
,我得到了预期的渲染索引页面。但是,如果我去my-domain.com/path/to/site
或my-domain.com/path/to/site/
我收到默认的 AWS NoSuchKey 错误消息。
我在这里关注 AWS 文档,所以我认为我已经正确设置了所有内容,所以我不知道为什么它不起作用。我错过了什么?
解决方案
作为一般参考,无法为 CloudFront 中的子目录指定默认根对象。来自AWS CF 文档:
但是,如果您定义默认根对象,则最终用户对您的分发的子目录的请求不会返回默认根对象。例如,假设 index.html 是您的默认根对象,并且 CloudFront 收到最终用户对您的 CloudFront 分配下的安装目录的请求:
http://d111111abcdef8.cloudfront.net/install/
即使 index.html 的副本出现在安装目录中,CloudFront 也不会返回默认根对象。
您可以通过 S3 做到这一点,我知道您正在尝试这样做,如此处正确解释。
我最近遇到了类似的情况,这是因为文件 index.html 没有设置为公共访问。因此,当您将文件上传到 S3 时,在 S3 控制台中,选择文件,然后转到Actions -> Make Public。即使您的存储桶启用了静态 Web 托管,您也需要这样做。基本上,每次您手动上传文件时。
如果您打算以编程方式或通过 AWS-cli 执行此操作,您可以设置一个标志以使其公开可访问(每个人的读取权限)。
推荐阅读
- xamarin - Xamarin CollectionView Observable Collection 未使用搜索栏更新
- python - XML 创建格式不正确
- python - SQLALCHEMY_DATABASE_URI 和 SQLALCHEMY_BINDS 均未设置
- mysql - 错误代码:1241。操作数应包含 1 列不知道如何解决此问题
- python - 如何在 Python 中按列值拆分大型数据集的数据框?
- excel - 需要 VBA 对更改电子表格中的数据进行排序以进行计算。当前代码给出错误
- nginx - 无法为 Ingress-Nginx Helm Chart 分配全局 LB IP
- javascript - 如何获取标题的动态值
- php - 如何使用 API v3 从 mailchimp 受众获取所有标签?
- javascript - window.Calendly.initInlineWidget 在首次加载时未定义,但在 React 和 Gatsby 中使用 useEffect 刷新后工作