### 重定向(redirect)
Tornado 中的重定向有两种主要方法:`self.redirect`,或者使用 `RedirectHandler`。
你可以在使用 `RequestHandler` (例如 `get`)的方法中使用 `self.redirect`,将用户 重定向到别的地方。另外还有一个可选参数 `permanent`,你可以用它指定这次操作为永久性重定向。
该参数会激发一个 `301 Moved Permanently` HTTP 状态,这在某些情况下是有用的, 例如,你要将页面的原始链接重定向时,这种方式会更有利于搜索引擎优化(SEO)。
`permanent` 的默认值是 `False`,这是为了适用于常见的操作,例如用户端在成功发送 POST 请求 以后的重定向。
```
self.redirect('/some-canonical-page', permanent=True)
```
`RedirectHandler` 会在你初始化 `Application` 时自动生成。
例如本站的下载 URL,由较短的 URL 重定向到较长的 URL 的方式是这样的:
```
application = tornado.wsgi.WSGIApplication([
(r"/([a-z]*)", ContentHandler),
(r"/static/tornado-0.2.tar.gz", tornado.web.RedirectHandler,
dict(url="http://github.com/downloads/facebook/tornado/tornado-0.2.tar.gz")),
], **settings)
```
`RedirectHandler` 的默认状态码是 `301 Moved Permanently`,不过如果你想使用 `302 Found` 状态码,你需要将 `permanent` 设置为 `False`。
```
application = tornado.wsgi.WSGIApplication([
(r"/foo", tornado.web.RedirectHandler, {"url":"/bar", "permanent":False}),
], **settings)
```
注意,在 `self.redirect` 和 `RedirectHandler` 中,`permanent` 的默认值是不同的。 这样做是有一定道理的,`self.redirect` 通常会被用在自定义方法中,是由逻辑事件触发 的(例如环境变更、用户认证、以及表单提交)。而 `RedirectHandler` 是在每次匹配到请求 URL 时被触发。