2014-10-13 6 views
1

У меня есть приложение, построенное на gae. Я использую python с картой webapp2. Мне нужно сделать 301 переадресацию от www.my-crazy-domain.com до my-crazy.domain.com так, чтобы устранить www и not-www двойные в результатах поиска.Google App Engine Python Webapp2 301 перенаправление с 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-адрес URL-адреса можно использовать в таких местах, как параметры запроса.

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.

 Смежные вопросы

  • Нет связанных вопросов^_^