如何配置Route 53条件重定向?实现带通配符的URL转发
Route53 路径级条件重定向实现方案
首先明确:Route53本身只支持域名级重定向,没法直接处理带路径参数(比如你说的*唯一标识符)的URL规则,必须结合CloudFront或者S3静态网站托管才能实现路径匹配与转发。
一、实现https://mydomain/list/*/request到https://newdomain/archive/list/*/request的重定向
推荐用CloudFront配合CloudFront Functions来搞定,步骤如下:
1. 配置CloudFront分配
- 创建针对
mydomain的CloudFront分配,源可以指向一个空的S3静态网站桶(我们只用来做重定向,不需要实际内容)。 - 在分配的行为设置里,新增一条路径模式为
/list/*/request的行为。
2. 写CloudFront函数处理重定向
创建一个CloudFront函数,代码逻辑如下:
function handler(event) { const request = event.request; const uri = request.uri; // 提取路径里的唯一标识符,比如从/list/xxx/request里拿到xxx const matchResult = uri.match(/^\/list\/(.*)\/request$/); if (matchResult) { const uniqueId = matchResult[1]; return { statusCode: 302, // 要是需要永久重定向就换成301 statusDescription: 'Found', headers: { location: { value: `https://newdomain/archive/list/${uniqueId}/request` } } }; } // 不匹配的请求按原路径走(也可以返回404,看你需求) return request; }
- 把这个函数关联到刚才创建的CloudFront行为上,触发类型选「Viewer Request」。
3. 关联Route53记录
在Route53里,把mydomain的A/AAAA记录设置为CloudFront分配的域名,开启别名模式就行。
二、关于“转发所有包含/结尾为request的URL”的支持
用CloudFront+函数完全可以实现这类规则:
- 匹配结尾为request的URL:把函数里的正则改成
/^.*\/request$/,提取完整路径后拼到新域名对应位置即可。 - 匹配包含request的URL:正则换成
/request/就行,但要注意避免误匹配(比如路径里有request字符串的其他场景),可以加更具体的限制(比如/.*request.*/)来精准匹配。
如果用S3静态网站托管的重定向规则,也能实现简单的路径匹配,但灵活性不如CloudFront函数:
- 比如设置S3重定向规则:
这种方式能匹配所有<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>list/</KeyPrefixEquals> <HttpErrorCodeReturnedEquals>200</HttpErrorCodeReturnedEquals> </Condition> <Redirect> <HostName>newdomain</HostName> <ReplaceKeyPrefixWith>archive/list/</ReplaceKeyPrefixWith> <HttpRedirectCode>302</HttpRedirectCode> </Redirect> </RoutingRule> </RoutingRules>/list/开头的路径,重定向到newdomain/archive/list/开头的路径,但没法精准匹配结尾为request的场景,适合规则简单的情况。
内容的提问来源于stack exchange,提问作者Microkid
相关产品推荐
相关产品推荐

