我正在尝试使用AWS API Gateway作为反向HTTP代理来展示部署为弹性beanstalk应用程序的几个原型Web应用程序:
每个EB应用程序都在其应用程序名称下的API网关中映射,例如
/hello1 (API Gateway mapping) --> prototype1 EB application
/hello2 (API Gateway mapping) --> prototype2 EB application
... etc
这是我创建的整体映射:
似乎API Gateway在每个映射中处理对根资源的请求,例如'/'与子资源请求不同,因此我为两者设置了代理映射:
root('/')资源是一个直接(即非贪婪)代理映射:
然后根据根上下文中的任何内容都有一个贪婪的代理映射:
然后我将API部署到名为“master”的阶段
想要访问每个原型,我会获取网址http://protos.acme.com/<stage>/<proto_name>
,例如http://protos.acme.com/master/hello1
。
我发现如果我在URL中添加一个尾部斜杠,或者指定一个特定的资源,例如index.html
然后一切都很完美,例如。
但是如果我省略了URL中的尾部斜杠,例如http://protos.acme.com/master/hello1
然后由API Gateway完成的URL重写停止工作,代理内容中的任何URL都不再正确解析,因为它们省略了原型名称,例如http://protos.acme.com/master/index.html
。
我找不到任何方法来配置省略尾部斜杠时的行为,我认为强制我的用户始终记住尾部斜杠是不可接受的。
感谢任何见解!
Edd
答案 0 :(得分:2)
答案 1 :(得分:0)
我遇到了同样的问题,正在使用具有自定义域和aws-serverless-proxy的AWS API网关来处理node.js后端中的api。
如果我的自定义域网址-https://host.com,基本路径-测试, 然后通过代理集成,有效的可访问网址-https://host.com/test/(带斜杠)
因此,如果传入的请求URL不以'/'结尾,我将在后端重定向URL。
示例代码:读取传入的请求并将响应重定向到相同的url,但在末尾添加斜杠。
let requestUrl = req.url;
if (requestUrl !== undefined && !(requestUrl.endsWith('/'))) {
res.writeHead(302, { 'Location': `${req.url}/` });
res.end();
}