如何在AWS Route 53配置顶级域名及子域名批量重定向?
在AWS Route 53中实现主域名+全量子域名批量重定向
可以通过S3静态网站托管+Route53通配符记录的组合实现单一配置下的批量重定向,以下是具体步骤:
方法一:低成本实现(S3 + Route53)
1. 创建并配置S3重定向桶
- 登录AWS S3控制台,创建一个新桶(桶名可自定义,例如
foo-redirect-bucket),关闭所有“阻止公共访问”选项。 - 进入桶的「属性」标签,找到「静态网站托管」并启用,选择「重定向请求」,然后配置:
- 目标域名:
bar.com - 重定向规则添加以下XML代码,实现主域名和子域名的批量替换:
<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals></KeyPrefixEquals> </Condition> <Redirect> <HostName>bar.com</HostName> <HttpRedirectCode>301</HttpRedirectCode> </Redirect> </RoutingRule> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> </Condition> <Redirect> <HostName>${host}</HostName> <ReplaceHostPrefix>foo.com,bar.com</ReplaceHostPrefix> <HttpRedirectCode>301</HttpRedirectCode> </Redirect> </RoutingRule> </RoutingRules>
foo.com到bar.com的重定向,第二条规则通过ReplaceHostPrefix将所有*.foo.com替换为对应的*.bar.com。 - 目标域名:
2. 配置Route53记录
- 打开Route53控制台,进入
foo.com的托管区域:- 创建主域名A记录:开启「别名」,选择「别名到S3网站端点」,关联刚才创建的S3桶的静态网站端点(注意匹配桶所在区域)。
- 创建通配符子域名A记录:记录名称填
*,同样开启「别名」并关联同一个S3静态网站端点。
方法二:灵活扩展方案(CloudFront + Lambda@Edge)
如果需要自定义重定向逻辑(比如路径保留、状态码调整),可以使用CloudFront配合Lambda@Edge:
1. 创建Lambda重定向函数
- 在
us-east-1区域创建Lambda函数(Node.js运行时),编写以下代码:exports.handler = (event, context, callback) => { const request = event.Records[0].cf.request; const host = request.headers.host[0].value; const newHost = host.replace(/foo\.com$/, 'bar.com'); const redirectUrl = `https://${newHost}${request.uri}`; const response = { status: '301', statusDescription: 'Moved Permanently', headers: { location: [{ key: 'Location', value: redirectUrl }] } }; callback(null, response); }; - 将函数发布为新版本,并添加CloudFront触发器权限。
2. 配置CloudFront分发
- 创建CloudFront分发,源可指向任意公开静态资源(比如空S3桶),将上述Lambda函数关联到「Viewer Request」事件。
3. 配置Route53记录
- 在
foo.com托管区域创建主域名和通配符子域名的A记录,别名指向CloudFront分发域名。
验证配置
使用curl -I foo.com和curl -I admin.foo.com命令检查响应头中的Location字段,确认重定向目标是否符合预期。
内容的提问来源于stack exchange,提问作者Bernard Wiesner
相关产品推荐
相关产品推荐

