URL с косой чертой в Google App Engine - PullRequest
0 голосов
/ 27 июля 2010

Это мой app.yaml:

- url: /about|/about/.*
  script: about.py

Это мой `about.py ':

application = webapp.WSGIApplication([(r'^/about$', AboutPage),
                                      (r'^/about/$', Redirect),
                                      (r'.*', ErrorPage)],
                                        debug = True)

Я хочу перенаправить все запросы на /about/ на /about. Я хочу, чтобы все другие запросы были отправлены на страницу с ошибкой.

Он работает на сервере разработки на localhost, но я не могу получить доступ к /about/ после того, как развернул приложение в GAE - он просто показывает пустую страницу.

Я изменил порядок шаблонов URL в app.yaml. Теперь он работает на GAE.

Ответы [ 2 ]

6 голосов
/ 25 февраля 2011

Если вам не нужны конечные слэши для запросов GET где-либо в вашем приложении, вы можете реализовать глобальное перенаправление вверху вашего app.yaml. Обратите внимание, что запросы POST НЕ будут перенаправлены, но это нормально (для меня в любом случае), потому что пользователи обычно не пишут вручную POST URL.

app.yaml

application: whatever
version: 1
api_version: 1
runtime: python

handlers:
- url: .+/ 
  script: slashmurderer.py

slashmurderer.py

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class SlashMurdererApp(webapp.RequestHandler):
   def get(self, url):
      self.redirect(url)

application = webapp.WSGIApplication(
   [('(.*)/$', SlashMurdererApp)]
)

def main():
   run_wsgi_app(application)
1 голос
/ 16 сентября 2012

Я вижу, что на этот вопрос уже был дан ответ, но я столкнулся с той же проблемой и хотел посмотреть, было ли "более ленивое" решение.

Если вы используете среду исполнения Python 2.7, то библиотека webapp2 доступна, и я считаю, что будет работать следующее:

import webapp2
from webapp2_extras.routes import Redirect Route

class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("This is my first StackOverflow post")

app = webapp2.WSGIApplication([
    RedirectRoute('/', MainHandler, name='main', strict_slash=True),
    ('/someurl', OtherHandler),
])

strict_slash = True означает, что если клиент не 'Чтобы поставить косую черту, она будет перенаправлена ​​на URL с косой чертой (в соответствии с первым аргументом).

Вы можете комбинировать специальные классы Route из webapp2_extras с обычными (regex, handler) кортежами, как показано выше.Параметр "name" требуется для конструктора RedirectRoute.Подробнее здесь: документация webapp2_extras для RedirectRoute

...