2014-11-27 4 views
0

현재 경로가 /app으로 시작하는 모든 요청을 자바 스크립트를 사용하여 라우팅하는 단일 정적 파일로 라우팅합니다.검색어 매개 변수를 기반으로 app.yaml의 url을 일치시키는 방법은 무엇입니까?

이제는 Google의 ajax 크롤링 프로토콜을 지원하고자합니다. 즉, /app으로 시작하고 ?_escaped_fragment=으로 끝나는 모든 URL에서 HTML 스냅 샷을 반환해야한다는 것을 의미합니다.

- url: /app\?_escaped_fragment= 
    script: main.app 

- url: /app(/.*)? 
    static_files: static/pages/app.html 
    upload: static/pages/app\.html 

그러나 /app?_escaped_fragment=에 대한 요청은 여전히 ​​정적 페이지로 연결됩니다 :

나는이 두 핸들러가 있습니다. 검색어 매개 변수와 일치하는 방법이 있습니까?

/app(/.*)?을 정적 페이지 또는 쿼리 매개 변수의 존재를 기반으로 한 스냅 샷을 반환하는 스크립트로 라우팅 할 수 있음을 알고 있지만 정적 파일을 제공하는 것이 훨씬 저렴하기 때문에 쿼리 매개 변수 내 애플 리케이션 서버에 충돌.

답변

1

사양을 읽는다면 핸들러 섹션은 쿼리 매개 변수가 아닌 경로에서만 REGEXP와 일치하는 것입니다. RESTful 원칙을 사용하여 앱을 디자인하는 경우 쿼리 매개 변수 액세스를 URI 기반 액세스로 쉽게 변환 할 수 있습니다. /app/escaped_fragment/.*을 기반으로 경로를 지정하고 처리기 함수에서 나머지 경로를 검사하여 escaped_fragment 유형의 특정 리소스가 요청되고 있는지 찾습니다.

+0

답변 해 주셔서 감사합니다. 나는 그 때 대본을 칠해야 할 것 같다./app/*/_ escaped_fragment_에 대한 요청에 응답하고 싶지만 Google이 '? _escaped_fragment ='에 요청을 보내려고하므로 작동하지 않습니다. https://developers.google.com/webmasters/ajax-crawling/docs/specification – bigblind

+1

아, 미안 해요, 유스 케이스 자체를 놓쳤습니다. 얼마나 당황 스럽습니까? 네, 요청을 제어 할 수 없다면 쿼리 매개 변수를 통해 수행되면 모든 처리기에 제어 흐름 분기를 포함해야합니다. webapp2.RequestHandler를 확장하여이 특수한 요청 패턴에 응답하고 해당 클래스를 통해 모든 핸들러를 하위 클래스로 만들고 각 doGet \ doPost 함수의 맨 위에서 정의한 수퍼 클래스의 멤버 함수를 호출하는 것이 좋습니다. 이는이를 확인하는 책임이 있습니다. – Nick

0

이것은 app.yaml에서 수행 할 작업이 아닙니다. 이러한 요청은 핸들러로 전달되어야하며 요청 매개 변수를 확인하고 적절하게 JSON 또는 HTML을 반환 할 수 있습니다.

+0

그런 경우 경로를 기반으로 경로를 지정할 수 있지만 app.yaml 내의 매개 변수를 쿼리 할 수 ​​없다는 것을 알게됩니다. – bigblind