使用S3存储桶通过单个Cloudfront分发服务多个网站

时间:2019-02-05 06:48:15

标签: amazon-web-services amazon-s3 amazon-cloudfront

我有一个S3存储桶,其中包含两个文件夹my-experiencetest-experience,这两个文件夹都包含一个网站。我想使用CloudFront分发来从这些文件夹提供网站。我想实现这一目标:

我想使用默认的根对象index.html创建一个S3存储桶分发,然后,当用户转到awd729398dh3d.cloudfront.net/test-experience时,我想从test-experience文件夹提供网站服务当他访问awd729398dh3d.cloudfront.net/my-experience时,我想从my-experience文件夹中服务网站。

我做了什么:

  

我创建了一个S3存储桶,然后在存储桶中创建了文件夹。根是空的。

     

我为存储桶创建了一个Cloudfront发行版,并将默认根对象设置为index.html。

     

现在,当我转到cloudfront链接时,我什么也没得到。我还尝试过创建其他来源。

1 个答案:

答案 0 :(得分:0)

默认的根对象仅在请求 root URL时适用,在您的情况下,在请求awd729398dh3d.cloudfront.netawd729398dh3d.cloudfront.net/时适用。

如果要将awd729398dh3d.cloudfront.net/my-experience重定向到awd729398dh3d.cloudfront.net/my-experience/index.html或将awd729398dh3d.cloudfront.net/test-experience重定向到awd729398dh3d.cloudfront.net/test-experience/index.html,则需要使用Origin Request Lambda@Edge函数重写URL:

exports.handler = (event, context, callback) => {
  const { request } = event.Records[0].cf;

  // Rewrite uri if needed
  if (/\/my-experience\/?$/.test(request.uri)) request.uri = '/my-experience/index.html';
  if (/\/test-experience\/?$/.test(request.uri)) request.uri = '/test-experience/index.html';

  callback(null, request);
};