我使用静态网站托管选项在Amazon S3上托管静态网站,这样S3将呈现一个文件夹而不会让我明确指向我的index.html文件 .
例如,以下是我的S3存储桶中页面的直接链接:http://new.rdegges.com.s3-website-us-east-1.amazonaws.com/category/2009/如您所见,当您访问该URL时,Amazon S3会自动在该目录中呈现index.html文件,从而允许我拥有干净的URL .
这一切都适用于S3 . 我遇到的问题是让Amazon Cloudfront正确处理这种行为 . 当我使用指定为源的S3存储桶创建Cloudfront Distribution并告诉它使用'index.html'作为根时,S3刚刚停止工作的index.html行为 .
例如,这是我在Cloudfront上的相同URL:http://d1mj00c6pby3gc.cloudfront.net/category/2009/
不幸的是,上面的URL不起作用,但如果我手动指定索引文件,它会,例如:http://d1mj00c6pby3gc.cloudfront.net/category/2009/index.html
我的问题是:我如何配置Cloudfront以使其尊重我网站的S3存储桶设置?
3 回答
S3网站功能可与Amazon CloudFront结合使用 . 但是,S3网站使用的域名与常规S3存储桶不同 . 在这种情况下,您需要将CloudFront分配的原始配置的
Origin Domain Name
设置为new.rdegges.com.s3-website-us-east-1.amazonaws.com
.您可以从S3上的静态网站托管面板获取此URL( endpoints ):
一旦CloudFront指向S3网站域名,S3网站功能就可以运行 .
我想在接受的答案中添加一些内容 .
首先,确保您的 Cloud 端有
Default Root Object
. 如documentation中所述,这不适用于subdirectories
.在设置新的cloudfront分发时,它将允许您选择您的存储桶
bucket-name.s3.amazonaws.com
. 请注意,URL中未指定区域 . 您需要做的是从s3获取静态站点URL并将其用作origin url
(该区域将在那里) .这可能是游戏的后期,但请查看Lambda@Edge . 您可以在没有扩展名的情况下截取Origin请求,并将它们指向文件夹中的index.html文档 . 这些结果被缓存,因此Lambda仅在获得新请求时执行 .