Amazon web services 使用S3/CloudFront将www重定向到非www,而不使用单独的存储桶

Amazon web services 使用S3/CloudFront将www重定向到非www,而不使用单独的存储桶,amazon-web-services,redirect,amazon-s3,amazon-cloudfront,no-www,Amazon Web Services,Redirect,Amazon S3,Amazon Cloudfront,No Www,我正在用CloudFront在S3上托管一个静态网站 现在,www.example.com和example.com返回相同的值,但我只希望example.com工作,并且www.example.com重定向到example.com 我知道我可以创建另一个bucket重定向到主bucket(example.com),但是我会为每个网站创建两个bucket和两个CloudFront发行版,这会造成混乱 有没有其他方法可以做到这一点 您似乎正在使用example.com上提到的DNS服务 但是,我不知

我正在用CloudFront在S3上托管一个静态网站

现在,
www.example.com
example.com
返回相同的值,但我只希望
example.com
工作,并且
www.example.com
重定向到
example.com

我知道我可以创建另一个bucket重定向到主bucket(
example.com
),但是我会为每个网站创建两个bucket和两个CloudFront发行版,这会造成混乱


有没有其他方法可以做到这一点

您似乎正在使用example.com上提到的DNS服务
但是,我不知道您在做什么DNS服务。
因为路线53是常用的,所以在路线53的基础上进行描述。
域是在example.com的基础上描述的。

您可以通过编程方式编写从example.com到www.example.com的重定向代码。
但是,通常在AWS级别解决此问题。

在AWS级别解析时需要两个存储桶。

  • example.com(内容桶)

  • www.example.com(bucket重定向到example.com)
    S3->属性->静态web托管->重定向请求
    目标存储桶或域:example.com
    协议:http
    (存储桶不需要任何文件。)

  • 将example.com映射到路由53上的A记录。

  • 将www.example.com映射到路线53的A记录。
  • 然后,如果您请求www.example.com,您将被重定向到example.com。

    如果您有任何问题,请随时提问
    多谢各位

    更新1
    如果您激活了CloudFront CNAME,例如example.com和www.example.com,
    您只需一个bucket即可获得example.com和www.example.com请求。

    但是,不建议这样做,因为URL的一致性不好。

    最近AWS引入了Cloudfront函数。您可以猜到,它允许您使用自定义函数代码在cloudfront中操纵http请求/响应

    在他们的介绍性博客中,他们介绍了这个特定的重定向用例。根据他们的博客:-

    URL重写和重定向:生成将请求重定向到其他URL的响应。例如,将未经身份验证的用户从受限页面重定向到登录表单。URL重写也可用于A/B测试

    我尝试过这种方法。我所做的:-

  • 建立一个新的cloudfront发行版
  • 将此发行版映射到现有网站bucket(其实并不重要)
  • 将新的
    重定向\u www\u至\u裸
    功能
    与此分发关联
  • 将此分发映射到
    路由53中的
    www
    子域
  • 我的函数是这样的:-

    这是我的关联设置

    我知道你的方法,但正如我在问题中提到的:“我知道我可以创建另一个bucket,重定向到主bucket(example.com),但是我会为每个网站创建两个bucket和两个CloudFront发行版,这会造成混乱。”我正在寻找一种不需要创建两个bucket的方法。@Theodore拥有两个bucket并不意味着要部署两个CloudFronts。仅为example.com bucket创建部署。www.example.com bucket是一个用于重定向到example.com域的bucket。bucket是否必须是公共的主bucket(包含文件)必须是公共的。。。权限>存储桶策略<代码>{“版本”:“2008-10-17”,“语句”:[{“Sid”:“PublicReadForGetBucketObjects”,“效果”:“允许”,“主体”:{“AWS”:“*”},“操作”:“s3:GetObject”,“资源”:“arn:AWS:s3:::example.com/*”}]}
    这并不能回答问题,更重要的是,它完全忽略了避免两个bucket的请求。更不用说将www映射到裸域实际上并不会导致重定向,它只提供来自
    www
    的相同内容,而我怀疑这是请求的内容。除非
    将www.example.com映射到Route 53是一个记录。
    意味着映射到bucket,否则不清楚您的意思。无论如何,这不是一个答案,因为据我所知,这是没有cloudfront的当前解决方案。