【发布时间】:2015-01-27 00:38:09
【问题描述】:
我正在使用 Google App Engine 和 webapp2 的 RedirectRoute 方法来处理这样的 url:
app = webapp2.WSGIApplication([
RedirectRoute('/notes/', handler=notes, strict_slash=True, name="notes"),
...
])
这按预期工作:/notes/ 的请求由我的处理程序处理,/notes 的请求将HTTP/1.1 301 Moved Permanently 重定向到/notes/。
正是我想要的。
但现在我添加了一个HEAD 处理程序。这适用于/notes/,但对/notes 的HEAD 请求得到的是HTTP/1.1 405 Method Not Allowed,而不是我所期望的:另一个301 Moved Permanently。它既不会重定向也不会到达我的处理程序。
我错过了什么?这是预期的行为吗?我应该如何重定向 HEAD 请求?
编辑
根据 Alex Martelli 下面的想法,这是可行的,但我很惊讶没有其他方式让我觉得我做错了什么,或者至少是困难的方式。
子类化webapp2.RedirectHandler 和webapp2_extras.routes.RedirectRoute 有效:
import webapp2
from webapp2_extras.routes import RedirectRoute
class myRedirectHandler(webapp2.RedirectHandler):
def head(self, *args, **kwargs):
return self.get(*args, **kwargs)
class myRedirectRoute(RedirectRoute):
def _get_redirect_route(self, template=None, name=None):
template = template or self.template
name = name or self.name
defaults = self.defaults.copy()
defaults.update({
'_uri': self._redirect,
'_name': name,
})
new_route = webapp2.Route(template, myRedirectHandler,
defaults=defaults)
return new_route
HEAD 请求现在重定向,但我不确定是否值得。
【问题讨论】:
-
也许这个问题会有所帮助:programmers.stackexchange.com/q/99894
-
我很感激。然而,我似乎建议我们应该能够发送 301 重定向作为对 HEAD 请求的响应,这正是我想在这里做的。
-
@MarkM,我同意这需要做很多工作——也许现在把它放在适当的位置并向 webapp2 的作者建议扩展,通过编辑该代码比“从外面“就像你做的那样。
标签: python google-app-engine webapp2