Cloudfront 不使用尾部斜杠重定向

Cloudfront not redirecting with trailing slash

我正在通过 Cloudfront 托管一个包含来自 S3 存储桶的多个子域的网站。 当我转到 www.domain.com/subdomain/(注意:尾部斜杠)时,网站会正确加载并从 www.domain.com/subdomain/****.js.

中获取缩小的 .js 和 .css 文件

但是,如果我导航到 www.domain.com/subdomain 时没有尾部斜线,该站点的 index.html 仍会提供服务,但会尝试从 www.domain.com/****.js.

获取资产

我曾尝试使用 lamba@edge 函数来更改请求 uri 并附加斜杠,但它不起作用。感谢您的帮助!

这将由 html 引用相对文件路径(即 src="****.js"src="/subdomain/****.js")引起。

如果您要解决此问题,您将需要执行重定向到用户浏览器中的斜线路径。这可以通过使用 Lambda@Edge 函数在 Origin Response 事件中执行重定向来完成。

下面是一个example redirect函数

 def lambda_handler(event, context):
 
     # Generate HTTP redirect response with 302 status code and Location header.
     
     response = {
         'status': '302',
         'statusDescription': 'Found',
         'headers': {
             'location': [{
                 'key': 'Location',
                 'value': 'http://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html'
             }]
         }
     }
     
     return response

为此,您需要添加自定义逻辑来检查 URL 是否需要通过检查“/”字符作为请求的最后一个字符来重定向。

此外,如果您可以将 css、js 和图像的路径从相对路径更改为绝对路径,如本答案顶部所指出的那样。