Laravel 8 同路径GET路由正常但POST路由不生效问题求助
问题根因
你遇到的现象本质是POST表单请求被Laravel拦截后触发了重定向,重定向后的GET请求走到了首页GET路由,接口调试工具不会自动跟随重定向/不会触发Web中间件的跳转逻辑,因此能正常命中POST路由。最常见的诱因是CSRF令牌缺失。
排查&解决步骤
- 第一步:补全CSRF令牌
Laravel默认给web中间件组的所有POST、PUT、DELETE请求开启CSRF校验,未携带合法令牌的请求会抛出419异常,默认处理逻辑是重定向到上一页。你只需要在Blade的form标签内部添加@csrf指令即可:<form action="{{url('/')}}" method="post"> @csrf <!-- 其他表单字段 --> </form> - 第二步:验证请求链路
打开浏览器开发者工具的「网络」面板,勾选「持久化日志」选项后提交表单,查看第一条请求的请求方法是否为POST、状态码是否为419/302,如果符合就是CSRF校验失败导致的跳转。 - 第三步:清理路由缓存
若修改路由后未更新缓存,也可能出现路由匹配异常,执行以下命令清理路由缓存即可:php artisan route:clear - 第四步:排查前端逻辑
检查页面是否有JS代码拦截了表单提交事件,存在强制修改请求方法为GET、或者跳转首页的逻辑。
内容的提问来源于stack exchange,提问作者XtyLish Sam
相关产品推荐
相关产品推荐

