2014-10-13 3 views
1

gae에 기반한 애플리케이션이 있습니다. 나는 webapp2 프레임 워크와 함께 파이썬을 사용한다. www.my-crazy-domain.com ~ my-crazy.domain.com에서 301 리디렉션을해야 검색 결과에서 www와 not-www 두 배를 제거 할 수 있습니다.Google App Engine Python Webapp2 301 www에서 www가 아닌 ​​도메인으로 리디렉션

누구든지 즉시 사용할 수있는 솔루션이 있습니까? 어떤 도움을 주셔서 감사합니다!

+0

I'v가 트릭을 만들었습니다. 해결책은 [여기] (http://pastebin.com/kcFb3Jqf)입니다. config.host_full에 www가없는 기본 도메인이 있습니다. 해결 방법은 기본 컨트롤러에서 요청을 확인하고 도메인이 다른 경우 리디렉션했습니다. – userlond

+1

누구든지 답변을 찾기 전에 답을 찾았으므로 ... – Lipis

+2

질문을 삭제하거나 직접 대답하고 수락하십시오. –

답변

5

I'v가 트릭을 만들었습니다.

class BaseController(webapp2.RequestHandler): 
    """ 
    Base controller, all contollers in my cms extends it 
    """ 

    def initialize(self, request, response): 
     super(BaseController, self).initialize(request, response) 
     if request.host_url != config.host_full: 
      # get request params without domain 
      url = request.url.replace(request.host_url, '') 
      return self.redirect(config.host_full+url, permanent=True) 

config.host_full에는 www가없는 기본 도메인이 있습니다. 해결 방법은 기본 컨트롤러에서 요청을 확인하고 도메인이 다른 경우 리디렉션했습니다.

+2

솔루션을 게시 해 주셔서 감사합니다 (다른 사람이 말한 것처럼 삭제하지 마십시오!). :) –

0

내가 대신 내가 정규식을 사용하고, 약간의 추가 설정 값을 필요로하지 대답 @userlond 수정 한 :

import re 
import webapp2 


class RequestHandler(webapp2.RequestHandler): 
    def initialize(self, request, response): 
     super(RequestHandler, self).initialize(request, response) 
     match = re.match('^(http[s]?://)www\.(.*)', request.url) 
     if match: 
      self.redirect(match.group(1) + match.group(2), permanent=True) 
0

는 아마도 이것은 기본의 get() 요청을 사용하여 간단한 방법입니다. url이 쿼리 매개 변수와 같은 장소에 www가있을 수 있으면 정규식을 향상 시키십시오.

import re 
import webapp2 


class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     url = self.request.url 

     if ('www.' in url): 
      url = re.sub('www.', '', url) 
      return self.redirect(url, permanent=True) 

     self.response.write('No need to redirect') 

app = webapp2.WSGIApplication([ 
    ('/', MainHandler) 
], debug=False) 
0

기본 응용 프로그램을 수정할 필요가없고 정적 파일에서도 작동하는 솔루션은 www가 실행되는 서비스를 만드는 것입니다.

www.yaml :

runtime: python27 
api_version: 1 
threadsafe: yes 
service: www 

handlers: 
- url: /.* 
    script: redirectwww.app 

redirectwww.py :

import webapp2 

class RedirectWWW(webapp2.RequestHandler): 
    def get(self): 
    self.redirect('https://example.com' + self.request.path) 

app = webapp2.WSGIApplication([ 
    ('.*', RedirectWWW), 
]) 

dipatch.yaml : 그 다음 파일을 생성 들어

dispatch: 
    - url: "www.example.com/*" 
    service: www 

그런 gcloud app deploy www.yaml dispatch.yaml로 배포합니다.