S3 www 到非 www 重定向将 /index.html 附加到 URL
Posted
技术标签:
【中文标题】S3 www 到非 www 重定向将 /index.html 附加到 URL【英文标题】:S3 www to non-www redirect appends /index.html to the URL 【发布时间】:2021-12-02 21:52:30 【问题描述】:假设我的域是 example.com
,我已经使用两个 S3 存储桶、两个 CloudFront 分配根据 this 博客文章设置 www 到非 www 重定向,并在指向 example.com
的 www 存储桶中设置重定向。
这很好用,但它实际上重定向到example.com/index.html
。是否可以将其重定向到example.com
?
【问题讨论】:
【参考方案1】:您的发行版配置中是否有任何具有index.html
的内容?我不能说为什么您会看到附加了 index.html 的重定向,但执行此操作的更简单方法(无需两个存储桶,并且对重定向有更多控制权)是使用 CloudFront 函数(可在 CloudFront 控制台的函数 部分)。这是一个例子:
function handler(event)
var request = event.request;
var host = request.headers.host.value;
if (host === 'www.example.com')
var response =
statusCode: 301,
statusDescription: 'Moved Permanently',
headers:
'location': 'value': `https://example.com$request.uri`
;
return response;
return request;
您可以将此设置为查看器请求函数,并将其附加到缓存行为。使用此设置,您只需要将 example.com 和 www.example.com 都设置为备用域名的单个发行版。
如果您需要将index.html
设置为您的根对象,您也可以在主机不是www.example.com 时通过修改request.uri
在函数中执行此操作 - 如果您对index.html
有任何引用,请使用此方法在您的发行版中,您可以将其全部移至此功能。这是一个示例函数,演示了如何在将请求发送到 S3 之前重写 URI(确保面向外部的 URL 不变):
https://github.com/aws-samples/amazon-cloudfront-functions/tree/main/url-rewrite-single-page-apps
【讨论】:
我不希望产生额外的费用并且不使用 CloudFront 功能。在这种情况下,我之前在 CloudFront 分配中将defaultRootObject
设置为 index.html
,然后我将其删除,但行为仍然存在。会不会是因为这个?以上是关于S3 www 到非 www 重定向将 /index.html 附加到 URL的主要内容,如果未能解决你的问题,请参考以下文章
使用 rewrite_mod 将 index.php 重定向到 root,并将 www 重定向到非 www [重复]
在 Route53 和 CloudFront 中将 www 重定向到非 www