首页 > 解决方案 > 无法让 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/sitemy-domain.com/path/to/site/我收到默认的 AWS NoSuchKey 错误消息。

我在这里关注 AWS 文档,所以我认为我已经正确设置了所有内容,所以我不知道为什么它不起作用。我错过了什么?

标签: amazon-web-servicesamazon-s3

解决方案


作为一般参考,无法为 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 执行此操作,您可以设置一个标志以使其公开可访问(每个人的读取权限)。

在此处输入图像描述


推荐阅读