Laravel 8在尾部斜杠上表现不好

使用带有尾部斜杠的API时出现问题

路线

路由::post(’user/register’,’[email protected]‘);

当我从邮递员/网站上调用这条路线时,它工作正常,但我从手机上调用这条路线时,后面有一个斜杠,如下所示

用户/寄存器/

默认情况下,Laravel删除尾部斜杠,但在转储请求方法时将请求设置为GET

$method=$\u服务器['REQUEST\u method'];
$json=json_encode(['response'=>$method],true);
结果-&gt&引用;{响应:'GET'}"

我无法获取请求正文

注意:我尝试了许多解决方案,但找不到任何解决方案,而且,我无法从移动端删除或更新路由呼叫,因此我必须在服务器端处理它

当Laravel检测到尾随斜杠时,它返回一个301重定向到一个“"“未跟踪斜杠”;版本重定向的请求总是“GET”,因此您将无法获得POST结果

防止这种情况发生的唯一方法(假设您使用的是Apache)是转到.htaccess文件(应位于laravel安装的公共目录中)并删除以下内容:

#如果不是文件夹,则重定向尾随斜杠。。。
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_URI}(+)/$
重写规则^1[L,R=301]

现在带有斜杠的URL将不再被重定向

编辑:如果只想阻止某些URI的重定向,而不是删除这些行,则需要指定更严格的条件。例如,停止仅重定向包含“的链接”;“客户”;,您将执行以下操作:

重写cond%{REQUEST\u FILENAME}-D
重写cond%{REQUEST_URI}!顾客
重写规则^1[L,R=301]

只有不包含“的链接”;“客户”;任何地方都将被重定向

发表评论