2014-02-25 2 views
4

쿼리 매개 변수에 따라 정적 파일을 제공하고 싶습니다. 보다 구체적으로는 검색 엔진 최적화를 위해 사전 렌더링 된 스냅 샷을 제공하고 싶습니다. 페이지는 Google Appengine에서 호스팅되므로 app.yaml을 사용하여 이러한 URL을 정의합니다.Google Appengine의 app.yaml에서 쿼리 매개 변수를 정의하십시오.

handlers: 
# Consider anything matching a dot static content. 
- url: /(.*\..*)$ 
    static_files: dist/\1 
    upload: dist/(.*\..*)$ 

# Serve snapshots for seo 
- url: /?_escaped_fragment_=(.*) 
    static_files: dist/snapshots/\1 
    upload: dist/(.*)$ 

# Otherwise let Angular handle it. 
- url: /(.*) 
    static_files: dist/index.html 
    upload: dist/index.html 

그러나, 나는 마지막 URL 핸들러가 트리거되는 쿼리 매개 변수 _escaped_fragment_로 URL을 가져올 때. URL에서 검색어 매개 변수를 정의 할 수 있습니까? 그렇다면, 내가 뭘 잘못하고 있니?

+0

가져 오려는 URL이 무엇입니까? – marcadian

+0

url googlebot이 가져올 것입니다. 예를 들어'/ support'가 정의되어 있으므로 googlebot은'/? _ escaped_fragment_ = support'를 가져옵니다. 이것은 AngularJS 사이트이므로'/? _ escaped_fragment_ = support'는 미리 렌더링 된 html 파일을 색인화하기 위해 그것을 가져와야합니다. –

+0

해결 방법은 _escape_fragment_가 쿼리 문자열에없는 경우 dist/index.html을 반환하는 핸들러를 생성하고 else는 주어진 _escape_fragment_에 대해 snapshop html을 반환합니다. 이런 식으로 서비스하는 데 추가 비용이 얼마나되는지는 알지 못합니다. –

답변

4

내가 잘못 입증하게되어 기쁘지만, app.yaml을 통해 디스 패칭 할 때 검색어 매개 변수가 고려되지 않았 음을 확신합니다.

+1

나는 다른 답변을 원하지만, 불행히도이 답변이 맞다고 생각합니다. –

0

나는 똑같은 문제가있었습니다. App Engine이 정적 쿼리 매개 변수를 디스패치하는 기능을 추가하지 않은 것은 다소 불편한 점입니다. 어쨌든.

import webapp2, urllib, logging, json, os 

dp = os.path.dirname(os.path.realpath(__file__)) 
fp = os.path.join(dp, "resources", 'index.html') 
w = open(fp, 'r').read() 

class Fragment(webapp2.RequestHandler): 
    def get(self, pathname): 
    if '_escaped_fragment_' in self.request.arguments(): 
     CODE_GOES_HERE_FOR_BUILDING_YOUR_FRAGMENT_RESPONSE 
    else: 
     self.response.write(w) 

application = webapp2.WSGIApplication(
    [('/(.*)', Fragment)], 
    debug=True) 

이 코드는 기본적으로 당신이 _escaped_fragment_ 쿼리 매개 변수에 파견 여부를 추측하고 그에 따라 출력을 수정합니다. 나는 performant가 얼마나 적은지 (있는 경우) 단지 index.htmlstatic_files: 핸들러에두고 app.yaml에 남겨 둘 수 있다는 것보다 잘 모른다.

+0

나는 아직도 문제가있을 때 비슷한 비슷한 것을 만들었습니다. 요즘 Google에서는 JavaScript로 렌더링 된 페이지의 색인을 생성하므로 '_escaped_fragment_'응답의 중요성이 줄어 듭니다. (그래도 다른 검색 엔진에 유용합니다.) –

+0

좋은 지적입니다. 안타깝게도 자바 스크립트 UI 요소를 사용하지 않으면 대다수의 콘텐츠가 표시되지 않는 동적 사이트가 있으므로 _escaped_fragment_는 여전히 특별한 경우에 유용합니다. 하지만 동의합니다. 대부분의 콘텐츠가 초기 자바 스크립트 렌더링에 표시되면 Google에서 처리 할 수 ​​있습니다. –

관련 문제