amazon-web-services - 在 lambda@edge 重写请求云不满足
问题描述
我想用 lambda@egde 重写。
尝试浏览时出现错误:https ://example.com/foo
这是我的功能:
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
if (/^\/foo($|\/)/.test(request.uri)) {
request.uri = "https://api.example.com/bar";
}
callback(null, request);
};
我想做重写(不是重定向)。这段代码有什么问题?
解决方案
您将 URI 更改为用户请求的绝对路径,它应该只是请求的路径部分。
所以下面是它应该变成的样子。
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
if (/^\/foo($|\/)/.test(request.uri)) {
request.uri = "/bar";
request.headers['host'] = [{ key: 'host', value: "api.example.com"}];
}
callback(null, request);
};
如果要更改域,则需要修改主机标头。
记住这个例子,它只会在它到达原点之前重写 URI。如果您希望用户请求更改,则需要执行重写。
推荐阅读
- c - C结构体数组的初始化
- r - 使用带有 dplyr 的 filter()
- http - Golang Wasm HTTP 请求失败
- web-services - 使用 Gsoap 访问 IIS Web 服务时出现分段错误
- javascript - 视频列表自动播放然后从头开始再次循环
- javascript - Angular ngFor trackBy 不工作。不更新 DOM
- reactjs - 如何在 React 中获取 url 参数
- flutter - Flutter - 如何使用类模型
- artificial-intelligence - 从视频中提取非冗余图像
- sql - Crystal Reports 未显示 SAP b1 查询