首页 > 解决方案 > 修复使用 Lambda@Edge 处理漂亮 URL 时的 Cloudfront 403 Access Denied 请求错误

问题描述

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

我在这里遵循了一些 AWS 文档实施默认目录索引,因为我的网站结构如下:

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

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

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

如果直接访问 /apple/index.html 这很好,但是如果您访问 /apple 的 HTML 文件无法加载 json 文件,它会得到 403 访问被拒绝,因为 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-cloudfrontaws-lambda-edge

解决方案


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

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

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


推荐阅读