You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9.19中仅API路由无法触发Middleware问题求助

排查步骤与解决方案

1. 确认访问路径是否正确

你的api.php路由在RouteServiceProvider中被设置了prefix('api'),所以实际访问URL必须是http://你的域名/api/categories,而非直接/categories。如果路径错误,请求会命中404或其他路由,自然不会触发目标中间件。

2. 清除路由/配置缓存

如果之前执行过php artisan route:cache或php artisan config:cache,Laravel会使用缓存的路由配置,后续修改的路由和中间件注册不会生效。执行以下命令清除缓存:

php artisan route:clear
php artisan config:clear

3. 检查中间件类文件大小写(Linux/macOS环境)

Linux和macOS系统严格区分文件名大小写,确保你的中间件类文件名是ApiAuthentication.php(与类名首字母大写保持一致),如果文件名大小写不匹配,Laravel会无法加载该类,导致中间件不生效。

4. 替换日志输出为直接响应测试

有时日志权限或配置问题会导致Log::info无法写入,让你误以为没进入中间件。修改中间件的handle方法,直接返回一个标识响应:

public function handle(Request $request, Closure $next) {
    return response('ApiAuthentication 中间件已触发', 200);
    // 原代码暂时注释
    // $locale = "ar";
    // \Log::info("-- middware locale setting --{$locale}");
    // app('translator')->setLocale($locale);
    // return $next($request);
}

再次访问路由,如果返回上述响应,说明中间件已生效,问题出在日志配置上;如果无响应,继续排查其他点。

5. 检查路由定义顺序

确认api.php中没有未带中间件的同路径路由定义在目标路由组之前——Laravel会优先匹配先定义的路由,导致带中间件的路由被忽略。

6. 直接在路由服务提供者中绑定中间件

尝试跳过api.php中的中间件定义,直接将api_auth添加到RouteServiceProvider的api路由组中测试:

Route::middleware(['api', 'throttle:30:1', 'api_auth'])
        ->namespace('App\Http\Controllers')
        ->prefix('api')
        ->group(base_path('routes/api.php'));

内容的提问来源于stack exchange,提问作者Rizwan Saleem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:42:42