我有一个在S3上运行的单页
javascript(Backbone)前端,我想要将几个深层链接重定向到同一个索引文件.您通常在Apache中使用mod_rewrite执行此操作,但在S3中无法执行此操作.
我已经尝试将默认错误文档设置为与索引文档相同,并且
这在表面上有效,但是如果你检查实际的响应状态标题,你会看到该页面以404的形式返回.这显然不是很好.
有另一个解决方案,它的丑陋但比错误文件黑客更好:
事实证明,您可以创建index.html的副本,并将其命名为与子目录相同(减去尾部斜杠),例如,如果我克隆index.html并将其命名为“about”,并确保内容-Type设置为text / html(在元数据选项卡中)对/ about的所有请求都将返回新的’about’,这是index.html的副本.
显然,这个解决方案是次优的,只适用于预定义的深层链接目标,但如果克隆index.html的步骤是前端构建过程的一部分,则可以减轻麻烦.使用Backbone-Boilerplate我可以编写一个grunt任务来做到这一点.
除了这两个hacky解决方法之外,我没有看到除了诉诸hashbangs之外的其他方法.
任何建议将不胜感激.
更新:
现在S3(实际上有一段时间)支持Index Documents解决了这个问题.
此外,如果您使用Route 53进行DNS管理,您可以设置指向S3存储桶的alias record,因此您不再需要子域名cname 🙂
最佳答案 不幸的是,据我所知(我使用s3网站相当多)你是对的钱.正如你所说,404黑客是一个非常糟糕的主意,所以你基本上有这些选择:
>使用某种常规后端而不是S3
> Content-Type解决方法
> Hashbangs
很抱歉成为坏消息的承担者:)
对我来说,你无法真正将域名的根源引导到S3网站的事实是我的一些东西的交易破坏者. mod_rewrite-type场景听起来像是另一个不起作用的好例子.