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