2014-01-30 44 views
0

我想重定向WebApp2中一系列在PathPrefixRoute下的已建立路由。比如,/ foo/bar和foo/baz就会被重定向到newfoo/bar和newfoo/baz。在WebApp2中重定向PathPrefixRoutes

这里是我今天:

import webapp2 
from webapp2_extras import routes 
.... 
routes.PathPrefixRoute('/foo', [ 
    webapp2.Route('/bar', 'BarHandler', name='bar_handler'), 
    webapp2.Route('/baz', 'BazHandler', name='baz_handler'), 
    # Many more routes below this. 
]) 
.... 

我想结束了

import webapp2 
from webapp2_extras import routes 
.... 
routes.PathPrefixRoute('/newfoo', [ 
    webapp2.Route('/bar', 'BarHandler', name='bar_handler'), 
    webapp2.Route('/baz', 'BazHandler', name='baz_handler'), 
    # Many more routes below this. 
]), 
.... 

同时确保谁访问的旧网址的人正确地重定向到新的。

在此先感谢!

回答

0

好了,你可以只设立一个catch所有/foo/some_arg在主应用

app = webapp2.WSGIApplication([ 
    ('/foo/(\w+)', OldFooHandler), 
    ... 

再有重定向旧处理程序到新

class OldFooHandler(webapp2.RequestHandler): 
    def get(self, second_arg): 
    self.redirect('/newfoo/%s' % second_arg) 
任何请求的类

当然,你只是使用你的路由处理程序来抓住所有其他的传递给/newfoo

+0

感谢您的回答!我希望有一种方法可以在不添加额外处理程序的情况下执行此操作。与webapp2.RedirectHandler在单一路由中的使用类似,但实质上是这样的:“这个前缀在它附加后会重定向到该前缀。 – betaorbust