Google App Engine中包含尾部斜杠的网址

时间:2010-07-27 12:26:23

标签: google-app-engine url-rewriting

这是我的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上的开发服务器上工作,但是我在GAE上部署应用程序后无法访问/about/ - 它只显示一个空页。

我在app.yaml中调整了网址格式的顺序。 它现在适用于GAE。

2 个答案:

答案 0 :(得分:6)

如果您不希望应用程序中任何位置的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 :(得分:1)

我看到这个问题已经得到了回答,但我遇到了同样的问题,想看看是否有“懒惰”的解决方案。

如果您正在使用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(以匹配第一个参数)。

您可以将webapp2_extras中的特殊Route类与普通(正则表达式,处理程序)元组组合,如上所示。 RedirectRoute的构造函数需要“name”参数。更多详情:webapp2_extras documentation for RedirectRoute