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