2015-05-03 1 views
1

Я перемещаю сайт своей компании на движок Google, главным образом статический контент с небольшими разделами, такими как даты, которые должны быть сгенерированы с использованием python. Я настроил все правильно и отлично работаю над движком приложения. Теперь я хочу сделать несколько URL-адресов, связанных с SEO.Как изменить URL-адрес URL-адреса и перенаправления для URL-адресов google AppEngine Webapp2?

Это строка кода, по которой веб-сайт обслуживается сейчас.

app = webapp2.WSGIApplication([ 
    ('/', IndexPage), 
    ('/discover', DiscoverPage), 
    ('/about', AboutPage), 
    ('/help', HelpPage), 
    ('/terms-and-privacy', TermsPage) 
], debug=True) 

с такими классами, как это определено для каждой страницы.

class DiscoverPage(webapp2.RequestHandler): 
    def get(self): 
     template_values = { 
      'bodyclass': 'discover', 
     } 
     template = JINJA_ENVIRONMENT.get_template('discover.html') 
     self.response.write(template.render(template_values)) 

Теперь то, что я хочу достичь являются:

  • когда сайт осуществляется доступ из www.domain.com, я хотел бы перенаправить его на domain.com.

Я добавил как WWW и удобства отображения WWW на консоли разработчика App Engine, сайт в настоящее время доступен как из WWW и не WWW urls.but Я только хочу non www версии

  • Когда есть косые черты к URL-адресам, разделите их и отправьте в версию без конечной косой черты.

Сейчас domain.com/discover работает нормально, но domain.com/discover/ заканчивается в 404.

у меня нет большого опыта работы с питона WebApps и мой фон в основном apache/nginx серверы и php. Есть ли у AppEngine что-то вроде htaccess rules или nginx rewrites?

ответ

1

Вы можете первым поймать все запросы на «WWW» субдомен:

from webapp2_extras.routes import DomainRoute 

app = webapp2.WSGIApplication([ 

    DomainRoute('www.domain.com', [ 
      webapp2.Route(r'/<:.*>', handler=RedirectWWW), 
    ]), 

    ('/', IndexPage), 
    ('/discover', DiscoverPage), 
    ('/about', AboutPage), 
    ('/help', HelpPage), 
    ('/terms-and-privacy', TermsPage) 
], debug=True) 

с обработчиком, который заменяет WWW часть с голой области:

class RedirectWWW(webapp2.RequestHandler): 
    def get(self, *args, **kwargs): 
     url = self.request.url.replace(self.request.host, 'domain.com') 
     return self.redirect(url, permanent=True) 

    def post(self, *args, **kwargs): 
     return self.get() 

Что касается второго вопроса, вы могли бы прочитать о параметре strict_slash здесь: https://webapp-improved.appspot.com/api/webapp2_extras/routes.html

+0

выполнил задание :). благодаря –

0

@ Ответ на Михейл поможет исправить проблемы правильно. добавив некоторые детали к его ответу.

для крепления второго выпуска [слеш], если вы попытаетесь strict_slash вы могли бы в конечном итоге получить этот error или некоторые другие.

ValueError: Routes with strict_slash must have a name. 

Так документировании шаги, которые я получил это работает

импорта RedirectRoute к коду

from webapp2_extras.routes import RedirectRoute 

Изменения в коде соответственно с параметром имени

app = webapp2.WSGIApplication([ 
    DomainRoute('www.'+SITE_DOMAIN, [ 
      webapp2.Route(r'/<:.*>', handler=RedirectWWW), 
    ]), 
    RedirectRoute('/', IndexPage,strict_slash=True,name="index"), 
    RedirectRoute('/discover', DiscoverPage,strict_slash=True,name="discover"), 
    RedirectRoute('/about', AboutPage,strict_slash=True,name="about"), 
    RedirectRoute('/help', HelpPage,strict_slash=True,name="help"), 
    RedirectRoute('/terms-and-privacy', TermsPage,strict_slash=True,name="terms") 
], debug=True)