Laragon 下 Laravel 表单提交失败主因是协议错配、CSRF 缺失或按钮类型错误:APP_URL 必须为 http://,禁用 TrustProxies 中间件,表单需含 @csrf 且按钮 type="submit",Network 显示 301 说明协议不匹配,419 表明 CSRF 未通过。

用 Laragon 开发 Laravel 项目时,表单提交“点了没反应”“跳转后空白”“Network 显示 301 或 419”,通常不是代码写错了,而是本地开发环境的协议、CSRF 或路由配置没对齐。Laragon 虽然开箱即用,但默认不自动处理 HTTPS 透传和信任代理,这点和线上 Nginx/Apache 不同,容易踩坑。
Laragon 默认是 HTTP,但 Laravel 可能误判为 HTTPS
Laragon 本地运行默认走 http://(比如 http://myapp.test),不启用 HTTPS。但如果在 .env 里把 APP_URL 写成了 https://myapp.test,或手动启用了 Laragon 的 HTTPS 功能但未同步配置 PHP,Laravel 的 url() 和表单 action 就会生成 https 链接。浏览器拒绝从 https 页面提交到 http 接口(或反向),导致静默失败或混合内容拦截。
- ✅ 检查 .env:确保
APP_URL=http://myapp.test(末尾不加斜杠) - ✅ 查看页面源码:右键 → “查看页面源代码”,搜索
<form>,确认 <code>action是http://开头 - ✅ 关闭 Laragon 的 HTTPS(除非真需要):右键 Laragon 托盘图标 → SSL → “Disable SSL for myapp.test”
Laragon 不传 X-Forwarded-Proto,TrustProxies 中间件要简化
Laragon 是本地集成环境,没有反向代理层(不像 Nginx + PHP-FPM 架构)。所以 App\Http\Middleware\TrustProxies.php 里配置的受信任 IP 和头字段,在 Laragon 下不仅无效,还可能干扰请求判断。
- ❌ 不要设置
$proxies = ['127.0.0.1'];并开启HEADER_X_FORWARDED_ALL - ✅ 正确做法:把
TrustProxies中间件设为空数组,或直接注释掉protected $proxies行 - ✅ 如果仍需强制 HTTPS(例如测试微信回调),在 AppServiceProvider@boot() 加:
\URL::forceScheme('https');—— 仅用于开发调试,勿提交到生产
POST 提交卡住?先盯紧 CSRF 和按钮 type
Laragon 环境下,419 错误(Page Expired)和“点不动”最常见于两个低级但致命的问题:
- ? 表单漏了
@csrf:Laravel 6+ 强制要求,没它就进不了控制器,连日志都不会打 - ? 登录/注册按钮写了
type="button":这是最大陷阱!必须是type="submit",否则点击只触发 JS 或什么也不做 - ? 路由命名不一致:比如表单用
{{ route('login') }},但routes/web.php里没加->name('login'),会报 500 错误(Route [login] not defined)
快速验证三步法(Laragon 专用)
遇到 POST 失败,不用翻日志、不用重装,30 秒定位:
- 打开 Chrome DevTools → Network 标签 → 点登录按钮 → 看第一条请求:状态码是 301?→ 协议错;是 419?→ CSRF 问题;是 405?→ 路由 method 不匹配
- 右键页面 → 查看源码 → 找
<form> → 确认有 <code>method="POST"、action地址正确、且存在<input name="_token"> - 终端执行:
php artisan route:list | grep login(把 login 换成你的路由名),确认该路由确实是 POST 且中间件含 web











