繁体   English   中英

HTML5历史记录pushState链接返回

[英]HTML5 history pushState link back

在今天早些时候看到另一篇关于HTML5 History API的文章并阅读了Mozilla的教程之后,我已经能够实现一个基本的工作演示,该演示使用该API允许URL“重写”而无需重新加载页面且不使用哈希。

我的问题是:假设您有一个访问页面的用户,单击使用History API编写新URL的这些链接之一。 然后,用户将页面添加为书签。 现在,我假设它将现在为重写的URL添加书签。 因此,当用户在几天之内回来并尝试转到已添加书签的页面时,它不会返回404吗? 那么,如何实现以某种方式解决它的方法呢?

这是假设我重写的URL指向一个不存在的位置。

我今天刚遇到这个问题,并在我的博客上写了一个有关此问题的条目:当使用HTML5 pushstate时,如果用户复制或添加了深链接并再次访问它,则将直接命中404。

即使是js pushstate库也无法在这里为您提供帮助,因为这是在页面和所有JS加载之前就请求的直接服务器调用。

最简单的解决方案是向Nginx或Apache服务器添加重写规则,以在内部将所有调用重写到同一index.html页面。 当浏览器实际上是同一页面时,它会认为该页面已被提供给唯一页面:

Apache(如果使用的是vhost,则在您的vhost中):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.html [L]
 </IfModule>

Nginx的

 rewrite ^(.+)$ /index.html last; 

当然,您仍然可以添加一些JS逻辑来显示正确的内容。 就我而言,我正在使用容易处理的骨干网路由。

我知道这很旧,但是您完全滥用了pushstate。 假设您有一个页面可以看到艺术家,可以将其命名为artist.php。 如果他们单击一个,就可以看到艺术家的简历。 因此,您有了“另一个”页面,artist.php?artist = journey

现在,假设您决定要在模式窗口中异步加载生物,因此您添加了一个ajax触发器来禁用布局并仅获取内容(artists.php?artist = journey&ajax = true)。 您可以“将” artist.php?artist = journey“推送”到历史记录,并进行设置,以使如果该页面被加载,它会在模式窗口中加载您的艺术家页面,并预载旅程。

这样,您就可以使用它来为页面的不同状态添加书签-不仅仅是单击它们的URL精美。

这应该由服务器端脚本来完成。 服务器应解析URL并创建页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM