将 www 子域重定向到 Route 53 上的顶级(裸)域(不使用 S3)?

Redirect www subdomain to an apex (naked) domain on Route 53 (not using S3)?

如何使用 Route53 和 CloudFront 将 www 子域重定向到顶级(裸)域?

请注意我没有使用 S3。 我的站点托管在 AWS ECS 服务上的 ELB 后面。

我已尝试使用以下设置创建记录集:

- Name: www 
- Type: CNAME - Canonical name
- Alias: No
- TTL (Seconds): 300
- Value: example.com

在 CloudFront 中,我只将 example.com 顶点列入白名单。结果,请求被阻止。

我也试过在 CloudFront 中添加 www.example.com 条目并且站点解析了,但是浏览器没有重定向 example.com

如果您正在考虑使用 CloudFront 和 Route53 进行重定向,目前您必须编写一个 Edge Lambda for HTTP Response Generation 来重定向。

AWS 引入了 CloudFront functions,它可以操纵流经 CloudFront 的请求和响应。

要将 www 子域重定向到顶级域,您可以使用以下查看器请求函数:

function handler(event) {
  var request = event.request;

  var headers = request.headers;
  var host = request.headers.host.value;

  if (host.startsWith('www')) {
    var response = {
      statusCode: 301,
      statusDescription: 'Moved Permanently',
      headers: {
        location: {
          value: 'https://' + host.replace('www.', ''),
        },
      },
    };

    return response;
  }

  return request;
}

为了使此功能正常工作,需要为 CloudFront 分配配置 www 子域和 apex 域。您还需要使用子域和顶级域配置 Route 53。

对于整个 gTLD 已包含在 HSTS 预加载列表中的域(例如 .dev),无法使用 S3 进行重定向,因为 S3 网站不支持 https。