【问题标题】:Fix Cloudfront 403 Access Denied request errors when using Lambda@Edge for pretty URLs修复使用 Lambda@Edge 处理漂亮 URL 时的 Cloudfront 403 Access Denied 请求错误
【发布时间】:2020-09-01 19:23:02
【问题描述】:

我有一个简单的 HTML 文件,它加载了一个 json 文件,它就在它旁边。

我在Implementing Default Directory Indexes 关注了一些 AWS 文档,因为我的网站结构如下:

/apple/index.html /orange/index.html

并且我需要我的用户能够简单地访问 mydomain.com/apple 而无需添加 /index.html。

AWS post 中的 Lambda@Edge(已修改)函数运行良好,除了一个关键问题:每个 index.html 文件旁边都有一个 json 文件,并发出同源请求以加载 json 数据。

如果直接访问 /apple/index.html 这很好,但是如果你访问 /apple 的 HTML 文件无法加载 json 文件,它会得到 403 access denied 因为 Lambda@Edge 正在修改请求并且基本上将uri附加到自身。

如何在 Lambda 函数中更正此问题?

这是我实际使用的功能:

exports.handler = (event, context, callback) => {
  const request = event.Records[0].cf.request;
  const uri = request.uri;

  if (uri.endsWith('/')) {
    request.uri += 'index.html';
  } else if (!uri.includes('.')) {
    request.uri += '/index.html';
  }

  callback(null, request);
};

【问题讨论】:

    标签: amazon-cloudfront aws-lambda-edge


    【解决方案1】:

    现在我已经确定了根本原因,我了解到这个问题在 Cloudfront 中很常见。

    这个答案帮助我解决了这个问题。

    https://stackoverflow.com/a/49997450/13550178

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-17
      • 2019-07-25
      • 2011-08-11
      • 2013-11-12
      • 2019-10-20
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      相关资源
      最近更新 更多