[英]@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.