如何通过API Gateway重定向到新域名并保留URL参数?
解决方案
AWS API Gateway 原生支持保留完整URL路径、查询参数的重定向,无需额外部署后端服务,通过内置映射变量拼接Location响应头即可实现。
你当前配置无法携带参数的核心原因是method.response.header.Location配置了硬编码的固定地址'https://tmmwith.us/',所有请求都会被直接跳转到根路径,自然不会保留原请求的路径和查询参数。
具体修改步骤如下:
- 先确认API资源路径配置为
{proxy+}通配符路径,同时绑定你需要支持的HTTP方法(建议选ANY覆盖所有方法),确保网关能捕获所有路径的请求。 - 在方法响应配置中,为301状态码提前声明
Location为合法响应头,否则映射规则会触发校验报错。 - 修改mock集成的响应参数映射规则,用API Gateway内置变量拼接目标跳转地址,替换原有硬编码值。
修改后的集成配置片段如下:
"x-amazon-apigateway-integration": { "type": "mock", "responses": { "301": { "statusCode": "301", "responseParameters": { "method.response.header.Location": "'https://www.example.com' + $context.path + ($input.params().querystring == '' ? '' : '?' + $input.params().querystring)" } } }, "requestTemplates": { "application/json": "{\"statusCode\": 301}" }, "passthroughBehavior": "when_no_match" }
配置说明:
$context.path会自动获取原请求的路径部分,比如示例中的/articles/fun-article$input.params().querystring会自动获取原请求的完整查询字符串,比如示例中的source=google&something=else,没有查询参数时该值为空,通过三元判断决定是否拼接前缀?- 变量自带URL编码处理,不需要额外做转义配置
注意事项
- 以上配置完全适配
AWS::ApiGateway::RestApi资源类型,不需要引入其他服务。 - 配置更新后需要重新部署API阶段才能生效,生效延迟通常在1分钟以内。
- 测试时建议优先用curl等命令行工具,避免浏览器缓存301重定向结果导致测试不准,测试命令参考:
curl -v https://你的API网关入口地址/测试路径?测试参数=1,查看返回头中的Location值是否符合预期。
内容的提问来源于stack exchange,提问作者David Gatti
相关产品推荐
相关产品推荐

