是否可以替换 Durandal 2.0 中的默认路由器行为以替换默认路由,例如: 'mysite.com/#/myroute' 与 'mysite.com/#!/myroute' 原因是为了谷歌检测页面的蜘蛛是 ajax 可抓取的,我需要在 url 中插入一个 hashbang,而不仅仅是一个 hashtag。任何帮助将不胜感激。
谢谢!
是否可以替换 Durandal 2.0 中的默认路由器行为以替换默认路由,例如: 'mysite.com/#/myroute' 与 'mysite.com/#!/myroute' 原因是为了谷歌检测页面的蜘蛛是 ajax 可抓取的,我需要在 url 中插入一个 hashbang,而不仅仅是一个 hashtag。任何帮助将不胜感激。
谢谢!
据我所知,在 Durandal 2.0 中你无法做到这一点。router
andhistory
插件不支持这一点,这不是一个简单的修复,因为代码中有一些地方依赖于#
.
但是,我认为这在您的场景中不是问题。也许您需要改变处理方式来处理使您的应用程序可抓取的要求。
#
您仍然可以通过在应用程序的主 HTML 中指定元片段类型来使您的应用程序 SEO 兼容:
<meta name="fragment" content="!">
所以你告诉谷歌你的链接没有,#!
但应用程序正在使用 JavaScript 呈现。然后来自爬虫的请求将包括
?_escaped_fragment_
.
因此,在您的应用中,您将使用:
mysite.com/#myroute
爬虫会请求:
mysite.com?_escaped_fragment_=myroute
查看 Google文档中关于抓取的第 3 节,以了解有关元片段标记的更多信息。
建议
如果你想充分利用这个特性,我建议在 Durandal 2.0 中使用 pushState,方法是像这样激活路由器:
router.activate({ pushState: true } );
并且还包括元片段标签。
<meta name="fragment" content="!">
使用 pushState 时应考虑的事项:
仅当您不打算支持旧浏览器时才使用 pushState。
你需要让你的服务器端 pushState 准备好,这意味着当服务器被请求时,mysite.com/myroute
应该能够返回相同的 JS 应用程序并让客户端处理查询字符串参数。例如,如果您使用的是 ASP.NET,则可以使用 IIS URL 重写来实现这一点。关于这个主题有一篇很好的博客文章。