我正在尝试将一个域的所有流量重定向到另一个域。我没有专门为此工作运行服务器,而是尝试使用AWS API Gateway和lambda来执行重定向。
我对根路径“/”有效,但对子路径的任何请求,例如/ a未处理。有没有办法定义“catch all”资源或通配符路径处理程序?
答案 0 :(得分:15)
截至上周,API Gateway现在支持他们所谓的“Catch-all Path Variables”。
详细信息和演练内容:API Gateway Update – New Features Simplify API Development
答案 1 :(得分:8)
更新:截至上周,API Gateway现在支持他们所谓的“Catch-all Path Variables”。请参阅API Gateway Update – New Features Simplify API Development。
不幸的是,您需要为每个级别创建资源。原因是API Gateway允许您通过对象访问这些参数。
例如:method.request.path.XXXX
因此,如果你只是/{param}
,你可以使用:method.request.path.param
访问它,但是如果你有一个嵌套路径(带有斜杠的参数),它就不会工作。您还可以获得整个请求的404.
如果method.request.path.param
是一个数组而不是...那么它可以在没有命名的情况下按位置获取参数。例如method.request.path.param[]
...命名参数甚至可以在那里处理,但访问它们并不容易。它需要使用某种JSON路径映射(想想你可以用它们的映射模板做什么)。遗憾的是,这不是它在API网关中的处理方式。
我认为没关系,因为这可能会使配置API网关变得更加复杂。但是,它也限制了API网关,并且为了处理这种情况,最终你最终会得到一个更混乱的配置。
所以,你可以走很远的路。为多个资源创建相同的方法,并执行以下操作:/{1}/{2}/{3}/{4}/{5}/{6}/{7}
等。然后,如果需要,您可以处理每个路径参数级别。
如果参数的数量总是相同的,那么你有点幸运,只需要设置一堆资源,但最后只需要一种方法。
来源:https://forums.aws.amazon.com/thread.jspa?messageID=689700򨘤
答案 2 :(得分:7)
您可以使用/{thepath+}
之类的路径创建资源。加号很重要。
然后在lambda函数中,您可以使用
访问该值event.path
- 始终包含完整路径event.pathParameters.thepath
- 包含您定义的部分。其他可能的用例:定义/images/{imagepath+}
之类的资源,仅匹配具有特定前缀的pathes。该变量仅包含子路径。您可以使用以下代码调试传递给函数的所有值:JSON.stringify(event)
答案 3 :(得分:1)
您可以使用路径变量/{param}
创建资源,并将其视为通配符路径处理程序。
谢谢, - 嘉侯
答案 4 :(得分:0)
与AWS最近引入的 HTTPAPI 有关,$ default用于通配符,用于捕获与定义的模式不匹配的所有路由。
有关更多详细信息,请参阅:aws blogs