唯一推荐且安全的方式是配置 VerifyCsrfToken 中间件的 $except 数组;需在 app/Http/Middleware/VerifyCsrfToken.php 中添加 URI 路径模式(如 'webhook/*'),不支持路由名或正则,api/、_ignition/、telescope/ 路由默认豁免。

在 Laravel 11.x 中,排除特定路由的 CSRF 校验,**唯一推荐且安全的方式是配置 VerifyCsrfToken 中间件的 $except 数组**。不要全局禁用中间件,否则会彻底关闭整个应用的 CSRF 防护。
正确配置 $except 数组
编辑 app/Http/Middleware/VerifyCsrfToken.php,在 $except 属性中添加需豁免的 URI 路径模式:
- 路径匹配基于请求的完整 URI(不含域名、查询参数),区分大小写,末尾斜杠可省略
- 支持
*通配符,例如'webhook/*'匹配/webhook/receive和/webhook/pay/notify - 可写完整路径如
'/payment/callback',或前缀如'api/webhook'(注意:不带/api/*前缀的 API 路由本身已默认豁免) - 不能写路由名(如
'webhook.handle')、控制器方法(如'App\Http\Controllers\HookController@handle')或正则表达式
哪些路由本就无需配置?
以下路径默认**不经过** VerifyCsrfToken 中间件,无需加入 $except:
- 所有以
api/开头的路由(因使用api中间件组,无 session 机制) -
_ignition/(Laravel Debugbar / Ignition 调试接口) -
telescope/(Telescope 监控面板)
常见误操作与风险提示
这些做法应避免:
- 在
app/Http/Kernel.php中注释掉\App\Http\Middleware\VerifyCsrfToken::class—— 这会全局关闭 CSRF 防护,极其危险 - 在控制器构造函数中调用
$this->middleware('csrf')->except(...)—— Laravel 11.x 不再支持该语法,且逻辑易出错 - 把第三方回调地址(如微信、支付宝通知)写成带查询参数的形式(如
'/pay/notify?from=alipay')—— 实际只匹配路径部分,应写为'pay/notify' - 忽略 session 配置问题,却以为是 CSRF 排除失败 —— 若
419 Page Expired频发,先检查config/session.php的 driver 是否可用(如 Redis 连接、file 目录权限)
验证是否生效
豁免后,对应 POST/PUT/PATCH/DELETE 请求不再校验 token,但需确保:
- 该路由确实走的是
web中间件组(否则本来就不校验) - 请求未被其他中间件提前终止(如 CORS、认证中间件)
- 用
php artisan route:list确认目标路由的中间件列包含web,而非仅api



















