如何使用AWS Lambda重定向至其他域名并保留请求路径?
实现带路径保留的Serverless API重定向
要实现将http://oldwebsite.com/aaa这类请求重定向到http://newwebsite.com/aaa,核心是从请求中提取原路径并拼接至新域名,以下是具体实现步骤:
1. 修改Lambda函数逻辑
Lambda需要获取API Gateway传递的请求路径,再拼接成完整的重定向URL。基于官方示例修改后的Node.js代码如下:
exports.handler = (event, context) => { // 从event中获取原请求的路径(如"/aaa") const originalPath = event.path; // 目标新域名 const targetDomain = "http://newwebsite.com"; // 拼接带原路径的完整重定向地址 const redirectUrl = `${targetDomain}${originalPath}`; // 构造重定向错误对象(遵循官方约定) const redirectError = new Error("Resource moved permanently"); redirectError.name = redirectUrl; // 重定向目标URL redirectError.statusCode = 301; // 301永久重定向,换成302则为临时重定向 context.done(redirectError, {}); };
2. 确保API Gateway传递路径参数
要让Lambda能拿到event.path,需要配置API Gateway为Lambda代理集成:
- 在API Gateway的资源配置中,选择集成类型为"Lambda函数代理"
- 这种集成模式会自动将请求的路径、查询参数、headers等信息封装到
event对象中,无需手动配置映射模板
如果使用非代理集成,需要在集成请求的映射模板中添加"path": "$context.path",确保路径参数被传递到Lambda。
关键说明
event.path包含请求的完整路径(以/开头),直接拼接新域名即可保留原路径结构- 通过
err.statusCode指定重定向类型:301为永久重定向(适合域名更换场景),302为临时重定向 - 官方的错误对象重定向机制中,
err.name会被API Gateway识别为Location响应头的值
内容的提问来源于stack exchange,提问作者neubert
相关产品推荐
相关产品推荐

