我正在尝试将一个域名的所有流量重定向到另一个域名。我不想专门为此工作运行服务器,而是尝试使用 AWS API Gateway 和 Lambda 执行重定向。
我已经成功地将根路径“/”重定向了,但任何子路径(例如 /a)的请求都没有被处理。是否有一种定义“catch all”资源或通配符路径处理程序的方法?
我正在尝试将一个域名的所有流量重定向到另一个域名。我不想专门为此工作运行服务器,而是尝试使用 AWS API Gateway 和 Lambda 执行重定向。
我已经成功地将根路径“/”重定向了,但任何子路径(例如 /a)的请求都没有被处理。是否有一种定义“catch all”资源或通配符路径处理程序的方法?
API Gateway现在支持所谓的“Catch-all Path Variables”(捕获所有路径变量)。
完整详情和操作步骤,请点击API Gateway Update – New Features Simplify API Development。
/{thepath+}
的资源。加号很重要。event.path
- 始终包含完整路径event.pathParameters.thepath
- 包含您定义的部分。其他可能的用例:像/images/{imagepath+}
这样定义资源,仅匹配具有特定前缀的路径。变量仅包含子路径。JSON.stringify(event)
调试传递给函数的所有值。
全文档资源路径只允许使用a-zA-Z0-9._-和花括号开头和结尾。
的错误提示。 - scubbo/
。 - Migwell/
和 /images
)。 - jakub.gserverless-offline
似乎会在 event.resource
中将+
更改为*
,即它会将其更改为 /{thepath*}
而不是 /{thepath+}
(YML 文件语法)。 因此,如果您的某些 JS 级别逻辑依赖于 event.resource
,则需要对其进行规范化,以便在 serverless-offline 和真正的 AWS 上具有相同的工作逻辑。 - jakub.gmethod.request.path.XXXX
因此,如果您只使用/{param}
,则可以使用method.request.path.param
访问该参数,但如果您有嵌套路径(带有斜杠的参数),它将无法正常工作。您还将收到整个请求的404错误。method.request.path.param
是一个数组...那么当未命名时,它可以按位置获取参数。例如method.request.path.param[]
...命名参数甚至可以在其中处理,但访问它们并不容易。它需要使用某种 JSON 路径映射(类似于您可以使用其映射模板执行的操作)。遗憾的是,这不是 API Gateway 的处理方式。/{1}/{2}/{3}/{4}/{5}/{6}/{7}
等等。然后,如果需要,您可以处理每个路径参数级别。ANY
请求和 /{proxy+}
- 不仅仅是通配符路径,而且还支持通配符 HTTP 方法 \o/ - Tom最近AWS推出的HTTPAPI与之相关,$default用作通配符来捕获未匹配定义模式的所有路由。
更多详情请参见:AWS博客
/{any}+
的答案不同,它也将匹配 /
。然而,我并没有发现上面的链接实际上解释了这个事实。更好的参考资料在这里:https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-routes.html#http-api-develop-routes.default - Migwell/{param}
创建一个资源,你可以将其视为通配符路径处理程序。/{param}
资源将无法处理嵌套路径。例如,/something
将匹配,但 /something/else
不会匹配资源 /{param}
。 - Joe B