/api 前缀由 RouteServiceProvider 中 mapApiRoutes() 方法通过 Route::prefix('api') 自动注册,统一挂载 routes/api.php 路由;不可在 api.php 内重复添加 prefix,否则导致双重前缀 404;可修改 RouteServiceProvider 中的 prefix 值以调整版本路径。

这个 /api 前缀不是写死在 URL 里的配置项,而是由 Laravel 的路由服务提供者(RouteServiceProvider)在框架启动时自动注册的。
核心来源:RouteServiceProvider 中的 mapApiRoutes()
打开 app/Providers/RouteServiceProvider.php,你会看到类似这样的方法:
- 它调用了
Route::prefix('api'),明确为所有 API 路由设定了统一前缀 - 同时指定了中间件组
->middleware('api'),确保这些路由走无状态、无 CSRF、带限流的处理流程 - 最后通过
->group(base_path('routes/api.php'))把routes/api.php文件里的所有路由加载进来
也就是说,/api 是 Laravel 框架约定的“入口通道”,所有定义在 api.php 中的路由,都会被自动挂载到这个前缀之下。
为什么不能直接在 api.php 里再加 prefix('api')?
如果你在 routes/api.php 文件开头又写一句 Route::prefix('api')->group(...),就会导致双重嵌套:
- RouteServiceProvider 已经加了一层
/api - 你又手动加一层
/api→ 最终变成/api/api/users - 浏览器或 Postman 访问
/api/users就会 404
这个前缀可以改吗?
完全可以,但要改对地方:
- 修改
RouteServiceProvider.php中mapApiRoutes()方法里的prefix('api'),比如改成prefix('v1')或prefix('api/v2') - 改完后,所有
api.php中的路由路径就自动变成/v1/users或/api/v2/users - 注意:不要只改 RouteServiceProvider,却不更新前端请求地址或文档,否则调用端依然发
/api/users,照样 404
为什么 routes/web.php 没有类似前缀?
因为 web.php 是面向浏览器的,通常直接对应域名根路径,比如 /login、/dashboard。而 API 是供程序调用的,需要显式区分协议层级,/api/xxx 是行业通用惯例,也方便 Nginx、网关做路由分发和版本管理。



















