2013-08-25 15 views

回答

6

據我所知,在Durandal 2.0中,你無法做到這一點。 routerhistory插件不支持這一點,並且它不是一個簡單的修復程序,因爲代碼中有一些地方依賴於#

但是,我不認爲這是你的情況下的問題。也許你需要改變處理應用程序可抓取需求的方式。

您仍然可以通過在應用程序的主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

+1

非常明確的書面迴應。謝謝,這對我很有幫助。 – ccorrin

+0

我有一個快速的問題,我認爲我現在有這個工作,但是當我提交我的網站到谷歌,並提供鏈接到谷歌,我需要給它http://mysite.com/#!或只是http://mysite.com和谷歌將添加在_escaped_fragment_,因爲我有它在元標記? – ccorrin

+0

我只會說mysite.com .. – margabit