【问题标题】:History API - tell browser to stay on index.html, regardless of the urlHistory API - 告诉浏览器停留在 index.html 上,不管 url
【发布时间】:2016-10-12 11:25:28
【问题描述】:

我正在为我的学校项目制作单页网页。我正在使用非常简单的历史 API,只是更改 URL,以便用户认为他在另一个页面上(但我在页面上隐藏和显示不同的元素) 它看起来像这样:

www.mypage.com/main www.mypage.com/slideshow

当我使用带有后退/前进历史按钮的应用程序时,它可以正常工作,但是当我想重新加载页面时,浏览器会尝试加载那个假 URL,这当然会导致崩溃。无论向用户显示什么网址,我如何设法始终保持在 index.html 上?

我尝试使用 htaccess 来管理这个,但我没有成功

【问题讨论】:

    标签: javascript html .htaccess url url-rewriting


    【解决方案1】:

    您似乎没有使用后端,这是实现所需结果的唯一方法。 (如果我的假设是正确的)浏览器给出错误(刷新后无法加载/slideshow),因为它正在尝试(从您的本地计算机)获取该文件,但该文件不存在。 SO answer explaining this well.

    因此,在您的示例中,您应该指示后端为所有路由(使用通配符)呈现相同的 view,并根据给定的 url 在前端进行显示。

    您不必使用 React-Router,而是创建一个路由器处理函数,该函数在每次刷新(即加载您的 javascript 时)运行,它告诉您的页面根据什么路由(或 url ,随意称呼他们)。

    (你会知道每个 url 都会运行 javascript,因为后端已经使用通配符 * 处理路由)

    【讨论】:

    • 感谢您的回答,但我忘了说我不允许使用后端,因为它只是前端应用程序。所以你说不可能? :/ 我认为 htaccess 重写是可能的——我会写一些规则,www.myweb.com/slideshow 实际上意味着 www.myweb.com/index.html。那不行吗? (如果会,我不知道怎么写)
    • 我对 .htaccess 了解不多(所以也许你应该仔细检查我要说的内容),但据我所知,.htaccess 仅在 Apache Web 服务器上运行(也就是你会用到后端相关的东西)。仅使用前端技术是不可能达到您想要的结果的。
    【解决方案2】:

    如果您只想将所有请求重写为一个 URL,则只需

    RewriteRule ^ /index.html [L]
    

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 2018-06-21
      • 2014-05-30
      • 2011-06-04
      • 2012-09-09
      • 2011-02-11
      • 1970-01-01
      • 2016-12-17
      • 2017-06-26
      相关资源
      最近更新 更多