使用 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,但您需要路径保持不变。
我已经使用 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,但您需要路径保持不变。