history.pushstate如何允许嵌套URL路径的单一入口点

How can history.pushstate allow a single point of entry for nested url paths

本文关键字:单一 入口 路径 URL pushstate 何允许 嵌套 history      更新时间:2023-09-26

很抱歉这个问题措辞不好。

带有 apache 的 PHP 将 index.php/index.html 用于目录 URL,例如:localhost

= localhost/index.php或 localhost/place = localhost/place/index.php

如果我从以下方面开始:本地主机/地点我使用 javascript history.pushstate 来更新带有长地址的 url,例如:本地主机/地点/子位置然后,如果我在浏览器中输入该 URL,我将转到 localhost/place/subplace/index.php当我真的想要 localhost/place/index.php 允许该 url 成为唯一的入口点时。

我正在使用简单的javascript(window.location.pathname或anchorNode.pathname(来检索用于ajax的url路径。这由类似于主干网的简单路由器使用.js来更新页面。javascript路由工作,浏览器中的后退/前进工作。如果我能让它与地址栏中输入的 url 的单一入口点一起使用就好了。

总结一下:

我想要我的 php 应用程序的单一入口点来获取所有子目录。

在单入口点,我想运行javascript来获取路径并使用它来使用ajax路由页面。

我正在使用 history.pushState 来更新 url,但是当目录比主目录长时,这会弄乱应用程序的单点入口。基本上我得到一个404页面。

现在我不太关心让它向后兼容没有history.pushState的浏览器。我只是想让这一件事起作用。

作为附录,我更喜欢在javascript中使用常规路径而不是查询字符串。无论页面是使用地址栏还是使用history.pushState加载,这都是我更喜欢的。我不知道这是否可以用 apache 重写来处理还是什么。

类似问题:

如何使用JS历史API推送状态处理刷新页面

好的。我把事情搞得太难了。

要使路由在页面加载时工作,我需要做两件事。

在.htaccess文件中,我可以使用apache重写使所有url路由到index.php?path=first/second/third

当页面加载时,只需将查询字符串中的新路径连接到处理路由的 javascript 字符串。

javascript仍在使用中,并且没有重复的功能。一切都很好。

这也回答了这个问题:如何使用JS历史API推送状态处理刷新页面