【发布时间】:2018-01-26 22:21:59
【问题描述】:
目前,我的应用程序在 Backbone.js 上运行。
该应用程序与 # 片段一起正常工作,但由于 URL 中的 #,它无法被 Google 机器人抓取。
因此,我决定删除 # 以使其对 SEO 更友好。我启用了 History pushState API 并添加了代码以防止默认操作。这是我初始化路由器实例时的代码 sn-p。
Backbone.history.start({pushState: true});
$(document).on("click", "a", function(e)
{
var href = $(e.currentTarget).attr('href');
var res = Backbone.history.navigate(href,true);
//if we have an internal route don't call the server
if(res)
e.preventDefault();
});
此外,我修改了我的 Apache 配置以启用 mod_rewrite 以处理无状态请求,例如刷新页面或将页面打开到新的浏览器窗口。这是我的 Apache 配置 sn-p:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/([a-zA-Z0-9]+)[/]?$ /index.html?pathtyped=$1 [QSA,L]
</IfModule>
我面临的问题是应用程序可以很好地处理短 url 片段,但它们不适用于大片段。意味着以下网址有效:
http:server_name/#view1 -> http:server_name/view1
http:server_name/#view2 -> http:server_name/view2
http:server_name/#view3 -> http:server_name/view3
但是带有长片段的网址不起作用。 (以下不起作用):
http:server_name/#view1/option1 -> http:server_name/view1/option1
http:server_name/#view2/option1/option2 -> http:server_name/view2/option1/option2
非常感谢任何解决问题的建议。谢谢你!
【问题讨论】:
标签: javascript html backbone.js pushstate