307 Temporary Redirect (since HTTP/1.1)
In this case, the request should be repeated with another URI; however, future requests
should still use the original URI.[2] In contrast to how 302 was historically implemented,
the request method is not allowed to be changed when reissuing the original request. For
instance, a POST request should be repeated using another POST request
4条答案
按热度按时间cmssoen21#
使用
307
应该正是您想要的a6b3iqyw2#
大约在2021年更新这里的原始答案是在
307
状态代码重定向在浏览器中一致工作之前编写的。根据下面Hashbrown的回答,应该使用307
状态码。旧答案POST数据在重定向时被丢弃,因为客户端将对301指定的URL执行GET请求。句号。
唯一的选择是将POST参数转换为GET参数,并将它们粘贴到您重定向到的URL的末尾。这不能在.htaccess文件重写中完成。
一种选择是捕获对要重定向的URL的POST请求,并将其传递给一个页面来处理重定向。你需要在代码中转换参数,然后发出重定向头,并以这种方式附加新的url参数。
更新:正如这个答案的注解中所指出的,如果你确实重定向到另一个指定POST参数的URL,并且该URL也是在没有参数的情况下访问的(或者参数是可变的),你应该指定一个指向该页面的规范URL的链接。
假设POST表单重定向到以下GET资源:
您可以将此链接记录添加到页面的头部:
这将确保所有的SEO价值将被赋予http://www.example.com/finalpage.php,并避免重复内容的可能问题。
nkoocmlb3#
严格地说,正确的代码是308,对应于301的永久重定向性质,并保留请求方法:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308
跨浏览器对代码308的支持是acceptable。
0yycz8jy4#
使用301重定向进行一般URL重写不是正确的方法。这是一个性能问题(特别是对于移动的,但也是一般情况下),因为它会使页面的请求数量增加一倍。
考虑使用URL重写工具,如Tuckey的
URLrewriteFilter
或apachemod_rewrite
。雷说的都是真的,这只是对你一般方法的补充评论。