Contributed by
Paweł Smoliński
in #26213.
在 web 程序中使用 301
HTTP 状态码来实现永久重定向是很常见的,而 302
状态码则是临时重定向。但是,这些重定向类型有一个问题是,因历史原因而重定向时, POST
请求被转换成 GET
请求(重定向到一个 POST
请求无法在老旧浏览器中工作)。
为了解决这个问题, HTTP 协议引入了两个全新的状态码:
307
(临时重定向): 定义在 RFC 7231 中,类似于302
(Found), 除了它不允许把POST
请求method 改成GET
。308
(永久重定向): 定义在 RFC 7538 中,类似于301
(Moved Permanently), 除了它不允许把POST
请求 method 改成GET
。
在 Symfony 4.1 中,通过把全新的 keepRequestMethod
参数添加到 redirectAction()
,以及 RedirectController
中的 urlRedirectAction()
方法中,我们增加了对这些新的重定向类型的支持。你也可以在路由定义中把它作为 keepRequestMethod
的选项来使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | route_301:
# ...
defaults:
# ...
permanent: true
route_302:
# ...
defaults:
# ...
permanent: false
route_307:
# ...
defaults:
# ...
permanent: false
keepRequestMethod: true
route_308:
# ...
defaults:
# ...
permanent: true
keepRequestMethod: true |