表单 post 突然失效通常源于环境或配置隐性变化,需重点排查协议不匹配(http/https)、csrf token 缺失或失效、中间件误配(如 web/api 组混淆)、服务器层拦截(如 waf、modsecurity)四类问题,多数可在 5 分钟内定位恢复。

表单 POST 突然失效,通常不是代码改坏了,而是环境或配置发生了隐性变化。重点排查协议、CSRF、中间件和服务器拦截这四类问题,多数情况 5 分钟内可定位并恢复。
检查表单 action 是否为 HTTP 协议
打开浏览器开发者工具 → Network 标签 → 提交表单 → 查看第一个请求的 URL 和状态码。如果看到 301 Moved Permanently,且 form 的 action 是 http:// 开头(而你实际用的是 HTTPS),说明 Laravel 误判了协议。
- 确认
.env中APP_URL=https://yourdomain.com(必须带 https) - 确保 Web 服务器(Nginx/Apache)正确传递了
X-Forwarded-Proto: https头 - 在
app/Providers/AppServiceProvider.php的boot()方法中临时强制协议:\URL::forceScheme('https');
验证 CSRF Token 是否真正发出并提交
查看页面源码,确认表单里存在 <input name="_token" value="...">。若缺失或为空,说明 Session 未启动或视图未执行 @csrf。
- 检查
config/session.php中domain是否与访问域名一致(如访问https://shop.example.com,则SESSION_DOMAIN=.example.com) - 确认
storage/framework/sessions/目录可写(尤其部署后权限重置过) - 临时在控制器入口加
dd(request()->session()->getId());,看 Session 是否正常生成
确认 POST 请求是否抵达 Laravel 应用层
如果 Network 里看不到任何 200/419/500 响应,只有 301 或直接超时,说明请求根本没进 Laravel——大概率被服务器层拦截。
- 检查主机是否启用了 ModSecurity、Cloudflare WAF 或 cPanel 安全防护(常见于 SiteGround、GoDaddy 等托管环境)
- 查看 Nginx error.log 或 Apache error_log,搜索关键词
ModSecurity、rejected、POST blocked - 临时禁用 WAF 或添加白名单规则,测试是否恢复
核对路由与中间件是否匹配
运行 php artisan route:list --method=POST,确认目标路由确实注册为 POST,并属于 web 中间件组(而非仅 api)。
- 若使用
Route::post()但页面是 GET 进入,确保表单method="post"且没被 JS 拦截提交 - 检查
app/Http/Kernel.php中web组是否包含VerifyCsrfToken::class(应有),且未被意外注释 - 若该路由是 API 类型(如
/api/login),需确认它不在web组里——否则会触发 CSRF 校验;应放在api组,并在VerifyCsrfToken的$except中排除











