通过 AWS Lambda 和 CloudFront 重定向 URL
Posted
技术标签:
【中文标题】通过 AWS Lambda 和 CloudFront 重定向 URL【英文标题】:Redirect URL through AWS Lambda and CloudFront 【发布时间】: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
) 传递到响应标头而不得到空值?
【问题讨论】:
【参考方案1】:您可以查看请求事件结构 here:
您可以通过使用 console.log 并检查 Cloudwatch 中的相应日志来查看请求 URI 字段的实际值。 要打印请求 uri,请在代码的最后两行之前添加以下行:
console.log(
Request uri is "$request.uri"
);
那么你就可以知道你在哪个索引中读取了userid值。
【讨论】:
我做了这个测试,看到我从哪个索引读取了 user_id。另外,我已经打印了 user_id 并输出了正确的 userid。这里的问题是该变量在响应标头中为空。 您能输入 request.uri 在 cloudwatch 上显示的值吗以上是关于通过 AWS Lambda 和 CloudFront 重定向 URL的主要内容,如果未能解决你的问题,请参考以下文章
使用 AWS Pinpoint 通过 Lambda 函数发送通知
通过 AWS Lambda 和 Cognito 注册用户(无服务器架构)
通过 AWS Lambda 和 CloudFront 重定向 URL
使用代理通过 AWS API Gateway 的 Lambda 错误
javascript CloudWatch到AWS Lambda到Slack Channel Alerts和Charts。通过SNS主题通过Lambda函数将CloudWatch警报发布到Slack通