我有一个S3存储桶,其中包含两个文件夹my-experience
和test-experience
,这两个文件夹都包含一个网站。我想使用CloudFront分发来从这些文件夹提供网站。我想实现这一目标:
我想使用默认的根对象index.html
创建一个S3存储桶分发,然后,当用户转到awd729398dh3d.cloudfront.net/test-experience
时,我想从test-experience
文件夹提供网站服务当他访问awd729398dh3d.cloudfront.net/my-experience
时,我想从my-experience
文件夹中服务网站。
我做了什么:
我创建了一个S3存储桶,然后在存储桶中创建了文件夹。根是空的。
我为存储桶创建了一个Cloudfront发行版,并将默认根对象设置为index.html。
现在,当我转到cloudfront链接时,我什么也没得到。我还尝试过创建其他来源。
答案 0 :(得分:0)
默认的根对象仅在请求 root URL时适用,在您的情况下,在请求awd729398dh3d.cloudfront.net
或awd729398dh3d.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);
};