如何用Terraform配置AWS API Gateway兼容带/不带尾斜杠路径
解决API Gateway路径尾斜杠匹配问题
要让你的端点同时支持带/不带尾斜杠的访问,需要从API Gateway路径配置和Lambda内的路由规则两方面调整:
1. 补充Terraform的API Gateway路径映射
在api-gateway-vars.tf中,新增一条带尾斜杠的路径配置,和原路径指向同一个Lambda函数:
"/api/v1/dep/{proxy+}": { "methods" : ["get"], "requireApiKey" : "false", "authorizer" : "false", "lambda" : "something", "lambdaEnvVars" : {} }, "/api/v1/dep/{proxy+}/": { "methods" : ["get"], "requireApiKey" : "false", "authorizer" : "false", "lambda" : "something", "lambdaEnvVars" : {} }
这样API Gateway会同时匹配带/不带尾斜杠的请求路径。
2. 调整Lambda内的路由规则(以Flask类框架为例)
你的Python应用如果用的是Flask类路由框架,默认会严格匹配尾斜杠。需要在路由装饰器中添加strict_slashes=False参数,让框架本身也兼容两种格式的路径:
@api.route("/api/v1/dep/<path:data>", strict_slashes=False)
这个参数会让框架将/api/v1/dep/top和/api/v1/dep/top/视为同一个请求,转发到对应的处理函数。
可选:用API Gateway重定向统一路径
如果不想维护两条路径配置,可以在API Gateway中设置重定向规则,自动将带尾斜杠的请求重定向到不带的版本(或反之)。不过这种方式会返回3xx重定向响应,适合需要统一路径规范的场景。
内容的提问来源于stack exchange,提问作者continuousLearner
相关产品推荐
相关产品推荐

