如何在AWS中重定向HTTPS请求(CloudFront后的S3静态页面)
解决https://example.com重定向到https://www.example.com的方案
方法一:使用CloudFront函数(推荐,边缘端执行,低延迟)
CloudFront函数可在边缘节点直接处理请求,无需回源S3,效率更高。
创建CloudFront重定向函数
- 登录AWS控制台进入CloudFront服务,打开「函数」页面点击「创建函数」。
- 函数名称设为
RedirectBareDomainToWWW,运行时选择cloudfront-js-2.0。 - 将默认代码替换为以下逻辑:
function handler(event) { const request = event.request; const host = request.headers.host.value; if (host === 'example.com') { return { statusCode: 301, statusDescription: 'Moved Permanently', headers: { location: { value: `https://www.example.com${request.uri}` } } }; } return request; } - 点击「发布」,将函数推送到「生产」阶段。
关联函数到裸域名的CloudFront分发
- 若未创建
example.com的CloudFront分发:- 新建分发,源选择现有S3存储桶;在「设置」中添加
example.com为备用域名,选择包含该域名的ACM证书(必须是us-east-1区域的);默认缓存行为的「函数关联」中,为「查看器请求」绑定刚创建的函数。
- 新建分发,源选择现有S3存储桶;在「设置」中添加
- 若已有
example.com的分发:- 编辑该分发的默认缓存行为,在「查看器请求」的函数关联中添加已发布的重定向函数。
- 若未创建
更新DNS解析
- 将
example.com的A/AAAA记录指向对应CloudFront分发的域名,等待解析生效。
- 将
方法二:使用S3存储桶重定向+CloudFront分发
若偏好S3原生重定向能力,可按以下步骤操作:
创建裸域名S3存储桶
- 创建名称为
example.com的存储桶(需与域名完全一致)。 - 在存储桶「属性」→「静态网站托管」中选择「启用重定向」,设置目标域名为
www.example.com,协议选择HTTPS。 - 配置存储桶权限,允许CloudFront通过OAI或存储桶策略访问。
- 创建名称为
创建裸域名CloudFront分发
- 新建分发,源选择该S3存储桶的静态网站端点(注意不是S3 REST API端点)。
- 添加
example.com为备用域名,选择对应ACM证书;配置缓存行为确保HTTPS请求可回源到S3重定向端点。
更新DNS解析
- 将
example.com的A/AAAA记录指向该CloudFront分发的域名。
- 将
注意事项
- ACM证书必须包含
example.com和www.example.com,且部署在us-east-1区域,CloudFront仅支持该区域的证书。 - 优先使用301永久重定向,利于SEO优化。
- 配置完成后需等待CloudFront部署(10-15分钟)及DNS解析生效。
内容的提问来源于stack exchange,提问作者Fergie
相关产品推荐
相关产品推荐

