首页 > 解决方案 > 在 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);
};

我想做重写(不是重定向)。这段代码有什么问题?

标签: amazon-web-servicesaws-lambda

解决方案


您将 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。如果您希望用户请求更改,则需要执行重写。


推荐阅读