Amazon CloudFront不尊重我的S3网站Bucket的index.html规则

时间:2013-03-09 09:20:48

标签: amazon-s3 amazon-cloudfront

我使用静态网站托管选项在Amazon S3上托管静态网站,这样S3将呈现一个文件夹,而不会让我明确指向我的index.html文件。

例如,这里是我S3存储桶中页面的直接链接:http://new.rdegges.com.s3-website-us-east-1.amazonaws.com/category/2009/如您所见,当您访问该URL时,Amazon S3会自动在该目录中呈现index.html文件,允许我有干净的网址。

这一切都适用于S3。我遇到的问题是让Amazon Cloudfront正确处理这种行为。当我创建一个将我的S3存储桶指定为源的Cloudfront Distribution,并告诉它使用'index.html'作为根时,S3刚刚停止工作的index.html行为。

例如,这是我在Cloudfront上的相同网址:http://d1mj00c6pby3gc.cloudfront.net/category/2009/

不幸的是,上面的URL不起作用,但是如果我手动指定索引文件,那就是:http://d1mj00c6pby3gc.cloudfront.net/category/2009/index.html

我的问题是:我如何配置Cloudfront以使其尊重我网站的S3存储桶设置?

3 个答案:

答案 0 :(得分:104)

S3网站功能可与Amazon CloudFront结合使用。但是,S3网站使用与常规S3存储桶不同的域名。在这种情况下,您需要将CloudFront分配的原始配置的Origin Domain Name设置为new.rdegges.com.s3-website-us-east-1.amazonaws.com

您可以从S3上的静态网站托管面板获取此URL(端点):

Static Website Hosting panel on S3

一旦CloudFront指向S3网站域名,S3网站功能就可以运行。

答案 1 :(得分:17)

我想在接受的答案中添加一些内容。

首先,确保您的云端有Default Root Object。正如documentation中所述,这不适用于subdirectories

在设置新的cloudfront分发版时,您可以选择自己的广告系列bucket-name.s3.amazonaws.com。请注意,URL中未指定该区域。您需要做的是从s3获取静态站点URL并将其用作origin url(该区域将在那里)。

答案 2 :(得分:2)

这可能是游戏的后期,但请查看Lambda@Edge。您可以在没有扩展名的情况下拦截 Origin Requests ,并将它们指向文件夹中的index.html文档。这些结果被缓存,因此Lambda仅在获得新请求时执行。