Php 如何在不重新加载页面的情况下更改地址栏上的url
我有 和一个子菜单Php 如何在不重新加载页面的情况下更改地址栏上的url,php,ajax,Php,Ajax,我有 和一个子菜单 主页=> 关于我们=> 产品=> 但是我想处理每个请求,只需使用Ajax请求更改内容。这样,网站只加载内容部分,而且速度更快,导航更容易 这里的问题是搜索引擎优化,因为谷歌将看到的唯一URL是,我想与关于我们的内容、产品内容等联系起来 我知道我可以用PHP来实现这一点,只需动态读取URL和编写Ajax,但这样做时,每次都会重新加载整个页面。 有没有一种方法可以在不重新加载整个页面的情况下执行此操作? 我想我需要的是在子菜单中有一个常规的锚点,例如指向“”的锚点,但是当单击
- 主页=>
- 关于我们=>
- 产品=>
Alex在不更改页面的情况下,您无法更改地址栏中的URL,因为要做到这一点,我可以让您访问我,但将地址栏更改为“读取”这是一个路由问题,而不是AJAX问题 如果您使用的是另一个工具(cough ASP.NET MVC cough),那么您只需添加一个接受URL的路由(我希望在PHP中有一种方法可以做到这一点),如
/home
/products
...
然后把他们送到,比如说
/index.php?area=home
/index.php?area=products
当在好的MVC或RESTful URL系统之外使用时,这通常通过重写引擎来完成。我在IIS上使用,但如果您在LAMP堆栈上工作,我认为Apache提供了一个提供相同功能的模块。(谷歌.htaccess
)
警告:接下来是咆哮
而且,无论如何
这听起来像是应该用一个来完成的,但是假设您有充分的理由使用AJAX,您可以通过修改哈希后面的部分,或者更好的是,修改hashbang,用javascript来更改URL:
window.location.hash = "#!about-us";
要从SEO的角度了解更多关于hashbang的信息,请查看Shopify是如何做到的?转到他们的网站,单击“功能”链接,您将看到URL显示: 然后单击任何子链接,您将看到URl中的地址在不使用哈希的情况下发生更改,但没有页面翻转
我不认为他们正在使用ajax来更改内容,因为所有内容似乎都包含在页面上的隐藏div中,但无论如何,您显然可以使用客户端技巧更改URL。这里有一个解决方案:
window.history.pushState(data, title, url)
这里Rob解释了它的工作原理,您有一个工作示例:
你知道Ajax不会自动让事情变得更快,对吧?????你感觉好吗?Ajax是最新的流行语?正在使用的PHP解决方案:
echo“window.history.pushState(“”,,”http://desired.url.here');";代码>。(来自下面的一个地下室)正是我想说的,但我找不到pdf:PYou可以,但这是一件很不明智的事情。如果答案是错误的,那怎么可能是正确的答案呢?下面有一个很好的答案,解释了如何去做那些你不能做的事情!谢谢大卫,但这不是我要问的。我使用htaccess重写,主要是为了SEO目的。无论如何,我同意第1点,我发现JS+Ajax非常有用,有时我用得太多了。但主要是CMS,访客端没有。