根据路径将 URL 从云端重定向到 API 网关

redirecting the URL from cloudfront to API Gateway based on path

我正在尝试根据路径实现从云端到 API 网关的重定向。 我的 UI 有一个云前端分发,源是托管在 S3 存储桶上的,例如

www.example.com

它满足请求。

我想要带有模式

的网址
www.example.com/share/*

将被重定向到 API 网关。 API 网关在内部重定向到其他 URL。

如果我直接在浏览器中使用 API 网关端点,它会获取预期的结果。

我不确定如何从云端重定向到 API 网关。我已将 cloudwatch 日志放在 API 网关上,可以看到到 API 网关的云端重定向不起作用。

我尝试添加 API 网关作为来源并在云端添加相同的行为,但没有成功。

您可以使用 Lambda@Edge in CloudFront. AWS provides an example redirect function here 进行重定向。

下面的例子

'use strict';

exports.handler = (event, context, callback) => {
    /*
     * Generate HTTP redirect response with 302 status code and Location header.
     */
    const response = {
        status: '302',
        statusDescription: 'Found',
        headers: {
            location: [{
                key: 'Location',
                value: 'http://URL/PATH',
            }],
        },
    };
    callback(null, response);
};

但是 似乎您应该考虑在 CloudFront 分配中使用不同的辅助源来服务 API 网关路径,而不是进行重定向是您申请的一部分。

为此,您需要使用站点的域名将 custom domain 添加到 API 网关,然后在 CloudFront 中添加匹配模式 /share 转发到您的 API 网关。

阅读 this page 了解更多信息。

一种方法是使用 lambda@edge for a viewer request 到 return 302 HTTP 代码重定向到客户端 url.

在 python 中,这样的 lambda 可能看起来像(来自文档):

 def lambda_handler(event, context):
 
     # logic to check the url and generate new url.
     
     response = {
         'status': '302',
         'statusDescription': 'Found',
         'headers': {
             'location': [{
                 'key': 'Location',
                 'value': '<your-api-gateway-url>'
             }]
         }
     }
     
     return response