使用History API‘重写’显示的地址,当用户访问该URL时服务器给出404错误

问题描述 投票:0回答:1

History API 用于重写/设置显示的地址作为 SPA 导航的一部分,例如:

history.pushState({}, `example`, `/example.htm`);

服务器上不存在

example.htm
页面,但是,我的客户端代码的编写方式是,当页面加载并且该页面位于地址中时,视图将更新为“example.htm”内容(即.“深度链接”)。

问题在于,当用户将该地址添加为书签并稍后尝试再次访问该地址时,服务器会给出 404 错误。服务器配置了“默认文档”,如果没有指定文档,服务器会毫无错误地交付预期的 html 和 javascript。

可以通过哪些方式对 URL 进行格式化,以便加载默认文档,但对于普通最终用户来说仍然看起来像典型的网址?由于设计约束,不能使用查询字符串参数(即不使用

?
&
),并且无法更改服务器代码以防止 404。

url single-page-application deep-linking html5-history
1个回答
0
投票

根据 CBroe 的评论,在阅读 URI Fragment 文档后,我相信我可以构造一个具有以下格式的 URL:

https://myserver.com/#/example.htm

然后在我的客户端代码中,我可以检查

/#/
并(如果找到)解析 URL 的其余部分以用作路由键。

  let startIndex = document.location.href.indexOf("/#/");
  if (startIndex > -1) {
    // extract page name
  }
© www.soinside.com 2019 - 2024. All rights reserved.