使用 S3 重定向破坏站点内链接

Intrasite links breaking with S3 redirect

我已经使用 S3 和 CloudFront 设置了一个静态网站。当我导航到像 example.com/nonexistant/ 这样的子文件夹时,我的 example.com/index.html 页面加载(如我所愿),但是它只是文本,我所有的站内链接都被弄乱了。

例如,我的徽标位于 example.com/img/logo.png。当我导航到 example.com/nonexistant/ 时,加载 example.com/index.html 的 html,但是它现在在 example.com/nonexistant/img/logo.png.

查找我的徽标

所以像 <img src="img/logo.png"> 这样的链接被破坏了,因为它从错误的目录开始搜索文件。

是否有解决方案可以修复我的重定向规则,使所有以 / 结尾的页面重定向到 example.com?我知道我可能只是去编辑我的代码,让所有路径都显示为 <img src="https://www.example.com/img/logo.png">,但我想知道这里是否有更简单的修复方法。

编辑:我已经在 CloudFront 中设置了 404 到 /index.html 状态码为 200,并在 S3 中将我的错误文档设置为 index.html

将您的链接更改为绝对路径,不带主机名。

 <img src="/img/logo.png">

S3 重定向规则只能匹配键前缀 -- 字符串的左锚定部分,因此不能用于解决此问题。

您也可以在原始响应触发器中使用 Lambda@Edge 函数,如果您真的想 重定向 / 结尾的路径的 404 响应返回到主页,但重定向会重写地址栏中的路径(根据定义——否则,它不是 "redirect"),我假设你正在进行 404 到 200 的转换,那么你可能正在做类似于 SPA,尽管显示了 index.html,但您需要路径保持不变。