是否可以替換Durandal 2.0中的默認路由器行爲來替換默認路由,例如:'mysite.com/#/myroute'和'mysite.com/#!/myroute'的原因是爲了檢測頁面的谷歌蜘蛛是ajax可爬行的,我需要在URL中插入一個hashbang而不僅僅是一個hashtag。任何幫助將不勝感激。Durandal 2.0路由器可以替換#爲#!爲ajax網絡爬行的目的?
謝謝!
是否可以替換Durandal 2.0中的默認路由器行爲來替換默認路由,例如:'mysite.com/#/myroute'和'mysite.com/#!/myroute'的原因是爲了檢測頁面的谷歌蜘蛛是ajax可爬行的,我需要在URL中插入一個hashbang而不僅僅是一個hashtag。任何幫助將不勝感激。Durandal 2.0路由器可以替換#爲#!爲ajax網絡爬行的目的?
謝謝!
據我所知,在Durandal 2.0中,你無法做到這一點。 router
和history
插件不支持這一點,並且它不是一個簡單的修復程序,因爲代碼中有一些地方依賴於#
。
但是,我不認爲這是你的情況下的問題。也許你需要改變處理應用程序可抓取需求的方式。
您仍然可以通過在應用程序的主HTML指定元片段式讓使用#
您的應用程序兼容SEO:
<meta name="fragment" content="!">
所以你告訴谷歌你的鏈接沒有#!
但該應用程序正在使用JavaScript呈現。然後,來自抓取工具的請求將包含 ?_escaped_fragment_
。
所以在您的應用程序,你將使用:
mysite.com/#myroute
和履帶會要求:
mysite.com?_escaped_fragment_=myroute
檢查谷歌的documentation on crawling的第3節,以瞭解更多關於元片段標籤。
SUGGESTION
如果你想通過激活路由器這樣充分利用這個功能,我建議在迪朗達爾2.0使用pushState的的:
router.activate({ pushState: true });
而且還包括元片段標籤。
<meta name="fragment" content="!">
事情你應該考慮是否使用pushState的:
使用pushState的只是,如果你不打算支持舊的瀏覽器。
你需要讓你的服務器端pushState的準備,這意味着,當被要求與mysite.com/myroute
服務器應該能夠返回相同的JS應用,讓客戶端過程中的查詢字符串參數。例如,如果您使用的是ASP.NET,則可以使用IIS URL重寫來實現。關於這個話題有很好的blog post。
非常明確的書面迴應。謝謝,這對我很有幫助。 – ccorrin
我有一個快速的問題,我認爲我現在有這個工作,但是當我提交我的網站到谷歌,並提供鏈接到谷歌,我需要給它http://mysite.com/#!或只是http://mysite.com和谷歌將添加在_escaped_fragment_,因爲我有它在元標記? – ccorrin
我只會說mysite.com .. – margabit