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

Laravel 12中API接口返回404 JSON响应被fallback路由拦截的问题求助

Laravel 12中API接口返回404 JSON响应被fallback路由拦截的问题求助

我最近在Laravel 12项目里卡壳了:API接口返回404 JSON响应时,总会被web路由里的fallback路由拦截,完全没法正常输出我想要的JSON 404结果。折腾了好几种方案都没解决,来请教各位大佬!

我的路由配置情况

首先说下当前的路由设置:

web.php 路由
最开始我用的是匹配Vue路由的写法:

Route::get('/{vue_capture?}', [VueController::class, 'getViewTemplate'])
    ->where('vue_capture', '^(?!docs\/api|docs\/api\.json)[\/\w\.-]*');

后来改成了fallback闭包:

Route::fallback(function() {
    return view('layouts.app');
});

但不管哪种写法,遇到API返回404的情况,都会触发这个路由返回Vue的视图,完全不是我要的JSON。

api.php 路由
我在api里定义了一个简单的测试路由:

Route::post('lookup', [Api\V1\Controller::class, 'lookup']);

这个路由里如果返回403的JSON响应,一切正常:

return response()->json(['message' => 'not found'], 403);

但只要返回404的JSON,就会被上面的fallback路由截胡:

return response()->json(['message' => 'not found'], 404);

我尝试过的解决方案

后来我给fallback路由加了Accept头判断,试图区分API和前端请求:

Route::fallback(function() {
    if (Request::header('Accept') !== 'application/json') {
        return view('layouts.app');
    } else {
        return response()->json(['message' => 'not_found'], 404);
    }
});

但这又带来了两个新问题:

  • 就算走了JSON分支,最终返回的是Nginx的404页面,根本看不到我定义的JSON响应
  • 更关键的是,这个API请求根本就不该走到fallback路由里,它应该直接在api路由里返回404才对

我还查了网上的方案,很多人说可以在ExceptionHandler里自定义404响应,但奇怪的是,我的请求根本没走到异常处理器里,完全没机会hook这个过程。

我的核心疑问

有没有大佬知道,怎么才能让Laravel在API接口返回404 JSON响应时,不触发web路由的fallback,直接输出我定义的404 JSON结果?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 03:10:11