【问题标题】:Redirect URL through AWS Lambda and CloudFront通过 AWS Lambda 和 CloudFront 重定向 URL
【发布时间】:2021-06-24 16:31:54
【问题描述】:

我有一个 lambda 函数,我希望执行从 https://foo.test.com/user_id/bar/https://app.test.com/user_id/new 的 301 重定向

用户的请求有一个设置为变量 (${userId}) 并传递给目标 URI (${newUri}) 的 user_id。

user_id的值是数字和字母(12-qw12

我编写了以下代码,将 ID 设置为变量并将其传递给响应标头:

exports.handler = function handler(event, context, callback) {
    let request = event.Records[0].cf.request;
    let uri = request.uri;
    let userId = uri.split('/')[3];
    let newUri = `https://app.test.com/` + userId + `/new`;
    const response = {
        headers: {
            'location': [{
                key: 'Location',
                value: newUri,
            }],
        },
        status: '301',
        statusDescription: 'Moved Permanently',
    };
    callback(null,response);
};

不幸的是,我从传递给响应标头的${userId} 中得到一个空值:

https://app.test.com//new

如果我将响应标头中的值作为字符串 (value: 'https://app.test.com/12-qw12/new') 写入,则它可以正常工作。

如何将变量 (${userId}) 传递到响应标头而不得到空值?

【问题讨论】:

    标签: node.js redirect aws-lambda amazon-cloudfront


    【解决方案1】:

    您可以查看请求事件结构 here:

    您可以通过使用 console.log 并检查 Cloudwatch 中的相应日志来查看请求 URI 字段的实际值。 要打印请求 uri,请在代码的最后两行之前添加以下行:

    console.log(Request uri is "${request.uri}");

    那么你就可以知道你在哪个索引中读取了userid值。

    【讨论】:

    • 我做了这个测试,看到我从哪个索引读取了 user_id。另外,我已经打印了 user_id 并输出了正确的 userid。这里的问题是该变量在响应标头中为空。
    • 您能输入 request.uri 在 cloudwatch 上显示的值吗
    猜你喜欢
    • 2023-03-10
    • 2018-06-27
    • 2023-04-05
    • 2023-02-24
    • 1970-01-01
    • 2016-06-07
    • 2018-08-02
    • 2020-06-21
    • 2020-07-15
    相关资源
    最近更新 更多