[英]@rails_folks | ''http://twitter.com/#!/user/followers" | Please explain
您將如何在Rails 3和最新的穩定版本2.3.9或soish中實現此路線?
我不太在乎追隨者的行為。 我真正想要的是如何在路由中創建“!#”。
另外,這有什么意義。 是語法還是語義?
#
之后,Rails不會直接得到任何東西。 相反,索引頁使用javascript檢查該值,並根據#
之后的網址向服務器發出AJAX請求。 我不確定他們在內部使用什么路由來處理該AJAX請求。
關鍵是要有一個由Javascript驅動的界面,每個人都在同一個“頁面”上,但是#標簽中的數據允許它動態加載任何自定義數據,並且如果您決定查看其他頁面,則無需加載整個新頁面。用戶。
哈希部分永遠不會發送到URL,但是通常的做法是操縱哈希值以維護歷史記錄,並為AJAX應用程序添加書簽。 唯一的問題是,通過使用散列來避免頁面重新加載,搜索引擎就被拋在了后面。
如果您的網站包含一些鏈接,
http://example.com/#home http://example.com/#movies http://example.com/#songs
您的AJAXy JavaScript應用程序可以看到#home
, #movies
和#songs
,並且知道必須從服務器加載哪種數據,並且一切正常。
但是,當搜索引擎嘗試打開相同的URL時,哈希將被丟棄,並且始終將其發送到http://example.com/
。 結果,您的站點的內部頁面(家庭,電影和歌曲)將永遠不會被索引,因為到目前為止無法訪問它們。
Google已創建了一個AJAX爬網規范,或更像一個合同,該合同允許網站充分利用AJAX的優勢,同時仍可通過搜索引擎獲得索引的好處。 您可以根據需要閱讀規范,但其本質是翻譯過程,它提取#!
之后出現的所有內容#!
並將其添加為querystring參數。
因此,如果您的AJAX鏈接使用#!
,那么搜索引擎會翻譯如下網址,
http://example.com/#!movies
至
http://example.com/?_escaped_fragment_=movies
您的服務器應該查看此_escaped_fragment_
參數,並以與AJAX相同的方式進行響應。
請注意,HTML5的“ 歷史記錄”界面現在提供了更改地址欄路徑的方法,而無需依賴散列片段來避免頁面重新加載。
使用pushState
和popState
方法
history.pushState(null, "Movies page", "/movies");
您可以直接將URL更改為http://example.com/movies
而無需刷新頁面。 搜索引擎可以繼續使用您在這種情況下將使用的相同URL。
URI中#
后面的部分稱為片段標識符 ,由客戶端而不是服務器解釋。 您無法路由此路由,因為它將永遠不會離開瀏覽器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.