首页 文章

Amazon CloudFront不会't Respect My S3 Website Bucket' s index.html规则

提问于
浏览
53

我使用静态网站托管选项在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 回答

  • 15

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

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

    Static Website Hosting panel on S3

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

  • 96

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

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

    在设置新的cloudfront分发时,它将允许您选择您的存储桶 bucket-name.s3.amazonaws.com . 请注意,URL中未指定区域 . 您需要做的是从s3获取静态站点URL并将其用作 origin url (该区域将在那里) .

  • 1

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

相关问题