History API 用于重写/设置显示的地址作为 SPA 导航的一部分,例如:
history.pushState({}, `example`, `/example.htm`);
服务器上不存在
example.htm
页面,但是,我的客户端代码的编写方式是,当页面加载并且该页面位于地址中时,视图将更新为“example.htm”内容(即.“深度链接”)。
问题在于,当用户将该地址添加为书签并稍后尝试再次访问该地址时,服务器会给出 404 错误。服务器配置了“默认文档”,如果没有指定文档,服务器会毫无错误地交付预期的 html 和 javascript。
可以通过哪些方式对 URL 进行格式化,以便加载默认文档,但对于普通最终用户来说仍然看起来像典型的网址?由于设计约束,不能使用查询字符串参数(即不使用
?
或 &
),并且无法更改服务器代码以防止 404。
根据 CBroe 的评论,在阅读 URI Fragment 文档后,我相信我可以构造一个具有以下格式的 URL:
https://myserver.com/#/example.htm
然后在我的客户端代码中,我可以检查
/#/
并(如果找到)解析 URL 的其余部分以用作路由键。
let startIndex = document.location.href.indexOf("/#/");
if (startIndex > -1) {
// extract page name
}