2011-03-03 5 views
2

을 설명해주십시오@rails_folks | 당신이 레일 3이 경로 마지막 안정 버전 2.3.9을 달성하거나 soish 얼마나

을 설명 | ' "http://twitter.com/#!/user/followers'?

는 정말 추종자 조치에 대해 상관 없어. 내가 정말 후하고있어 라우팅에 '#!'를 만드는 방법입니다. 또한

,이 지점 무엇입니까.이 구문이나 의미인가?

+0

[ "/ # action"Ruby on Rails에서 Routes.rb의 경로] 가능한 복제본 (http://stackoverflow.com/questions/2612118/action-route-in-routes-rb-in-ruby-on) -rails) – jdl

+0

나는 그것의 중복을 생각하지 않는다. '#'와'#! '는 많은 차이를 만듭니다. 내 [답변] (http://stackoverflow.com/questions/5176514/rails-folks-http-twitter-com-user-followers-please-explain/5176759#5176759)을 참조하십시오. – Anurag

+0

제발 * * 이것을하지 마십시오! 그것은 웹을 파괴합니다. 이 대회는 Google에서 진부한 오래된 기존 응용 프로그램을 Google 검색에 참여시키기 위해 고안되었습니다. 그것이 그 유일한 목적입니다. 진부한 오래된 레거시 애플리케이션이 없다면 이것을 사용해서는 안됩니다 *. 진부한 예전의 레거시 애플리케이션을 가지고 있다면 이것을 사용하지 말고 수정해야합니다. 최종선 : 이것을 사용하지 마십시오. –

답변

3

레일스는 # 이후에 직접 아무것도 얻지 못합니다. 대신 색인 페이지에서 javascript 및 ma로 해당 값을 확인합니다. # 뒤에 url을 기반으로 서버에 AJAX 요청을 보냅니다. AJAX 요청을 처리하기 위해 내부에서 어떤 경로를 사용하는지 잘 모르겠습니다.

요점은 모든 사람이 동일한 "페이지"에 있지만 해시 태그의 데이터를 사용하여 사용자 지정 데이터를 즉시로드 할 수 있고 완전히 결정한 경우 완전히 새로운 페이지를로드하지 않고 Javascript 기반 인터페이스를 갖는 것입니다. 예를 들어 다른 사용자를 볼 수 있습니다.

+0

와우. js가 없으면'http : // twitter.com/#' – s84

3

해시 부분은 URL로 전송되지 않지만 히스토리를 유지 관리하기 위해 해시를 조작하고 AJAX 응용 프로그램에 대한 북마크를 만드는 것이 일반적입니다. 유일한 문제는 페이지 재로드를 피하기 위해 해시를 사용하면 검색 엔진이 남아 있다는 것입니다.

일부 링크가있는 사이트,

 
http://example.com/#home 
http://example.com/#movies 
http://example.com/#songs 

귀하의 AJAXy 자바 스크립트 응용 프로그램이 #home, #movies#songs보고하고, 서버에서로드해야하는 데이터의 종류를 알고 모든 것이 잘 작동이 있다면.

그러나 검색 엔진이 동일한 URL을 열려고하면 해시가 삭제되고 항상 http://example.com/으로 전송됩니다. 결과적으로 사이트의 내부 페이지 (집, 영화 및 노래)는 지금까지 색인을 생성 할 수 없으므로 색인이 생성되지 않습니다.

Google은 엔진이 검색을 통해 색인 생성의 이점을 누리고있는 동안 AJAX를 최대한 활용할 수있는 계약을 맺고 AJAX crawling specification 이상의 사이트를 만들었습니다. 원하는 경우 스펙을 읽을 수 있지만, 그 핵심은 #! 뒤에 나오는 모든 것을 취하여 쿼리 스트링 매개 변수로 추가하는 변환 프로세스입니다.

그래서 AJAX 링크의 경우

귀하의 서버가이 _escaped_fragment_ 매개 변수를보고 응답하도록되어

 
http://example.com/#!movies 

 
http://example.com/?_escaped_fragment_=movies 

에, 다음 검색 엔진과 같은 URL을 번역하는 것, #!을 사용하고 AJAX가하는 것과 같은 방식입니다.

HTML5의 History interface은 페이지 재로드를 피하기 위해 해시 조각에 의존 할 필요없이 주소 표시 줄 경로를 변경하는 방법을 제공합니다.직접 페이지 새로 고침없이 http://example.com/movies의 URL을 변경할 수 pushStatepopState 방법

history.pushState(null, "Movies page", "/movies"); 

를 사용

. 검색 엔진은이 경우에 사용할 동일한 URL을 계속 사용할 수 있습니다.

0

URI에서 # 다음 부분은 조각 식별자이라고하며 서버가 아닌 클라이언트가 해석합니다. 브라우저를 떠나지 않으므로 경로를 지정할 수 없습니다.