我已经使用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转到状态代码为200的/index.html,并在S3中将我的错误文档设置为index.html
答案 0 :(得分:1)
将链接更改为不带主机名的绝对路径。
<img src="/img/logo.png">
S3重定向规则只能匹配键前缀-字符串的左固定部分,因此不能用于解决此问题。
如果您确实想对返回/
的路径的重定向 404响应,请在原始响应触发器中使用Lambda @ Edge函数, redirect重写地址栏中的路径(根据定义-否则,它不是“ redirect”),并且我假设由于您正在执行404到200的转换,因此您可能需要执行类似SPA的操作尽管显示了index.html,但保持不变的路径。