You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS中实现https://www.example.com到https://example.com的重定向方案咨询

解决HTTPS下www.example.com到example.com的重定向问题

我帮你整理两种最优解决方案,完美解决你遇到的CloudFront不识别S3重定向规则的问题,彻底告别meta刷新这种临时方案:

方案一:正确配置S3静态网站 + CloudFront(适合简单重定向场景)

这应该是最直接的方案,你之前可能踩了一个常见误区——用了S3的REST API端点作为CloudFront源,导致重定向规则不生效。按以下步骤配置:

  • 创建并配置www.example.com的S3存储桶

    1. 创建名为www.example.com的S3存储桶(名称必须和域名完全一致)。
    2. 开启「静态网站托管」,选择「重定向到另一个域名」,目标域名填example.com,协议选HTTPS。
    3. 确保存储桶的权限设置正确:不需要开启公开访问(因为CloudFront会通过Origin Access Identity访问S3),配置OAI并给它赋予读取存储桶的权限。
  • 配置CloudFront分发

    1. 创建新的CloudFront分发,源设置不要选自动弹出的S3存储桶,手动输入S3静态网站的端点(比如www.example.com.s3-website-us-east-1.amazonaws.com,具体地址在S3静态网站托管页面可以找到)。
    2. 配置自定义域名:添加www.example.com,并绑定在AWS Certificate Manager(ACM)中申请的SSL证书(注意:ACM证书必须在us-east-1区域申请,才能用于CloudFront)。
    3. 设置行为规则:将「Viewer Protocol Policy」设为Redirect HTTP to HTTPS,确保所有HTTP请求自动转成HTTPS。
    4. 其他默认配置即可,等待CloudFront分发部署完成(通常需要10-15分钟)。
  • 配置Route 53
    将www.example.com的A/AAAA记录类型设置为「别名」,指向刚才创建的CloudFront分发域名。

这样配置后,用户访问https://www.example.com时,CloudFront会把请求转发到S3静态网站,S3会返回标准的301永久重定向到https://example.com,完全符合HTTP规范,体验比meta刷新好太多。

方案二:Lambda@Edge(适合复杂重定向逻辑)

如果你不需要依赖S3,或者有更复杂的重定向需求(比如保留路径、查询参数,或者多个子域名重定向),Lambda@Edge是更灵活的选择:

  • 创建Lambda函数(必须在us-east-1区域)

    1. 进入Lambda控制台,切换到us-east-1区域,创建一个新的Node.js函数。
    2. 替换函数代码为以下逻辑,实现www到主域名的301重定向,同时保留请求路径和查询参数:
      exports.handler = (event, context, callback) => {
        const request = event.Records[0].cf.request;
        const host = request.headers.host[0].value;
        
        // 检查请求是否来自www子域名
        if (host === 'www.example.com') {
          // 构造重定向URL,保留路径和查询参数
          const redirectUrl = `https://example.com${request.uri}${request.querystring ? '?' + request.querystring : ''}`;
          const response = {
            status: '301',
            statusDescription: 'Moved Permanently',
            headers: {
              location: [{
                key: 'Location',
                value: redirectUrl
              }]
            }
          };
          callback(null, response);
        }
        
        // 非www请求直接放行
        callback(null, request);
      };
      
    3. 发布函数的新版本(Lambda@Edge需要关联已发布的版本)。
  • 关联Lambda@Edge到CloudFront

    1. 进入CloudFront控制台,找到对应的分发(如果没有就新建一个),编辑行为规则。
    2. 在「Lambda Function Associations」中,添加「Viewer Request」事件,选择刚才创建的Lambda函数版本。
    3. 配置自定义域名www.example.com和SSL证书,Route 53记录指向CloudFront分发。

这种方式直接在CloudFront的边缘节点处理重定向,不需要经过S3,性能更高,也能轻松扩展到更复杂的重定向场景。

为什么你之前的方法不行?

你提到CloudFront无法识别S3的重定向规则,大概率是因为你把S3的REST API端点(比如s3.amazonaws.com/www.example.com)作为了CloudFront的源。这种情况下,CloudFront会把请求当作对象存储的请求,不会触发S3的静态网站重定向逻辑——只有用S3静态网站的专属端点作为源,重定向规则才会生效。

内容的提问来源于stack exchange,提问作者Glenn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:26:22