如何在AWS S3静态站搭配的CloudFront中配置别名301重定向?
你当前配置未生效的原因
将两个域名同时添加到同一个CloudFront分发的备用域名列表后,CloudFront会默认将两个域名的请求都转发到源站返回相同内容,不会主动触发重定向逻辑,因此两个域名都可以独立访问。
方案1(推荐:零代码、无需Lambda@Edge、最快5分钟配置完成)
不需要修改现有Gatsby部署、也不需要新增S3存储桶,直接用CloudFront原生重定向功能即可实现:
- 首先将
lp.xxx.com从你现有landingpage对应的CloudFront分发的「备用域名(CNAME)」列表中移除 - 新建一个CloudFront分发,源类型选择「重定向响应」,不需要配置实际源站:
- 重定向目标域名填写
landingpage.xxx.com - 协议选择
HTTPS - 响应码选择
301 Moved Permanently - 按需勾选「将请求路径附加到重定向 URL 之后」,纯单落地页不需要保留路径可以不勾选
- 重定向目标域名填写
- 给这个新分发绑定
lp.xxx.com作为备用域名,选择包含lp.xxx.com的ACM SSL证书(必须在us-east-1区域申请) - 最后修改Route53中
lp.xxx.com的解析记录,指向这个新的CloudFront分发域名即可
方案2:单CloudFront分发场景,需使用Lambda@Edge
如果你希望保留两个域名在同一个CloudFront分发下,不需要新建分发,就需要用到Lambda@Edge实现域名判断重定向:
- 在us-east-1区域创建Node.js运行时的Lambda函数,示例代码如下:
exports.handler = (event, context, callback) => { const request = event.Records[0].cf.request; const host = request.headers.host[0].value; if (host === 'lp.xxx.com') { const response = { status: '301', statusDescription: 'Moved Permanently', headers: { 'location': [{ key: 'Location', value: `https://landingpage.xxx.com${request.uri}` }] } }; callback(null, response); return; } callback(null, request); };
- 发布Lambda函数版本,将其绑定到现有CloudFront分发的
viewer request触发事件,缓存行为选择默认*即可 - 配置完成后等待CloudFront分发生效,就会自动识别域名做重定向
内容的提问来源于stack exchange,提问作者TomasJ
相关产品推荐
相关产品推荐

