laravel 10 的 cors paths 不支持正则,仅接受通配符(如api/*)或精确路径;正则仅用于路由参数约束(where()/route::pattern());需按版本分组路由并显式绑定cors中间件实现逻辑隔离。

在 Laravel 10 中,CORS 路径本身不支持正则表达式匹配 —— config/cors.php 文件里的 paths 选项只接受字符串或通配符模式(如 'api/*'、'sanctum/csrf-cookie'),不解析正则。
哪些地方能用正则?明确区分用途
别混淆 CORS 路径和路由约束:
-
CORS 的
paths:仅用于指定哪些请求路径需要启用跨域头。只支持简单通配符:*(匹配全部)、api/*(匹配 api 下任意一级)、api/v1/users(精确匹配)。不能写api/v[0-9]+/.*这类正则。 -
路由参数约束:这才是正则真正起作用的地方,用
where()或Route::pattern()限制 URL 中的动态参数格式,比如/user/{id}要求id是数字。
想实现“按规则匹配路径”?得绕道路由层
如果确实需要基于复杂模式控制 CORS 行为(例如:只对 /api/v1/xxx 和 /api/v2/xxx 开启,但排除 /api/internal/xxx),不能靠 paths 配置,而应:
- 把 CORS 中间件注册为路由中间件(而非全局中间件);
- 用
Route::middleware('cors')显式绑定到符合正则逻辑的路由组; - 配合路由命名或前缀分组,间接达成效果。例如:
在 routes/api.php 中:
Route::prefix('v1')->middleware('cors')->group(function () {
Route::get('/users', [ApiController::class, 'index']);
});
Route::prefix('v2')->middleware('cors')->group(function () {
Route::get('/posts', [ApiController::class, 'list']);
});
这样比硬塞正则进 paths 更可控、更符合 Laravel 设计逻辑。
正确配置 cors.php 的 paths 示例
以下是生产环境推荐写法(安全且清晰):
-
'paths' => ['api/*', 'sanctum/csrf-cookie']—— 覆盖主流 API 和 Sanctum 初始化路径; -
'paths' => ['api/v1/*', 'api/v2/*']—— 按版本隔离,避免误开内部接口; - 开发时可临时加
'http://localhost:3000/*'(注意:这不是标准写法,Laravel 不识别该格式;实际仍要用api/*+ 前端域名白名单控制)。











