这是我的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。
答案 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