【问题标题】:Cloudfront not redirecting with trailing slashCloudfront 不使用斜杠重定向
【发布时间】:2020-10-15 01:36:49
【问题描述】:
我正在通过 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 并附加斜杠,但这不起作用。感谢您的帮助!
【问题讨论】:
标签:
amazon-web-services
amazon-s3
amazon-cloudfront
【解决方案1】:
这将由 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 和图像的路径从相对路径更改为绝对路径,如本答案顶部所指出的那样。