我使用静态网站托管选项在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存储桶设置?
答案 0 :(得分:104)
S3网站功能可与Amazon CloudFront结合使用。但是,S3网站使用与常规S3存储桶不同的域名。在这种情况下,您需要将CloudFront分配的原始配置的Origin Domain Name
设置为new.rdegges.com.s3-website-us-east-1.amazonaws.com
。
您可以从S3上的静态网站托管面板获取此URL(端点):
一旦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仅在获得新请求时执行。