遇到的问题
网站申请了证书,配置了https,然后直接配置强制https(301永久重定向),访问网站确实重定向到https了,以为一切ok啦,没想到同事post请求接口发现有连过来,传参没收到…
排查了一下原因post请求经过301重定向后变成get请求,传参也就丢失了.
参考了POST请求慎用301 Moved Permanently,发现如果要保持post传参需要使用307重定向才行
HTTP/1.1 307 Temporary Redirect:对于POST请求,表示请求还没有被处理,客户端应该向Location里的URI重新发起POST请求。
nginx 设置重定向
apache 设置重定向
thinkphp6 中间件设置重定向
<?php
namespace app\common\middleware;
/**
* 强制重定向到https
*/
class CheckHttps
{
public function handle($request, \Closure $next)
{
$scheme = $request->scheme();
if ($scheme == 'http') {
$url = $request->url(true);
$url = str_replace('http://', 'https://', $url);
return redirect($url, 307);
}
return $next($request);
}
}