Cloudfront with s3。将{url} /index.html重定向到{url} /

时间:2017-03-14 14:00:05

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

我使用Amazon S3从Amazon CloudFront提供HTTP请求来存储文件。 S3存储桶设置为启用网站托管。索引文档为index.html

当我在Google上搜索时,我会看到这两个网址:

  • {url}/index.html
  • {url}/

这两个网址都提供相同的内容。

如何设置,{url}/index.html执行代码301永久移动{url}/

2 个答案:

答案 0 :(得分:1)

两个选项,具有不同的复杂度:

规范网址

使用<link>标签告诉Google给定文档的规范URL是什么:

<link rel="canonical" href="https://example.com/">

使用Lambda @ Edge重定向

您可以使用部署到CloudFront边缘服务器的简单Lambda函数。遵循this tutorial,您想要的函数体(Node.js 8.10)为:

exports.handler = (event, context, callback) => {
  const { request } = event.Records[0].cf;
  const isIndex     = request.uri.endsWith('/index.html');

  if (isIndex) {
    const withoutIndex = request.uri.replace(/\/index\.html$/, '');
    callback(null, redirect(withoutIndex));
  } else
    callback(null, request);
};


function redirect(url) {
  return {
    status:            '301',
    statusDescription: 'Moved Permanently',
    headers: {
      location: [{
        key:    'Location',
        value:  url
      }]
    }
  };
}

答案 1 :(得分:0)

理想情况下,如果它是静态内容,则不需要按照您要求的方式重定向...

您可以通过以下方式进行配置:如果用户请求{url} /然后重定向云前端以提供{url} /index.html而不是其他方式......

参考:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html