allowed_origins_patterns 是 Laravel 11 中 fruitcake/laravel-cors 提供的正则匹配机制,支持泛域名且兼容 supports_credentials => true;需配置为空的 allowed_origins、启用 supports_credentials,并设置 paths;正则须完整匹配 Origin 字符串。

在 Laravel 11 中,allowed_origins_patterns 是 fruitcake/laravel-cors 包(Laravel 官方推荐)提供的正则匹配机制,专门用于支持泛域名(如 https://*.example.com),它比 allowed_origins 更灵活,且**不会与 supports_credentials => true 冲突**——这是关键优势。
allowed_origins_patterns 的正确写法
该字段接受字符串数组,每个元素是标准 PHP PCRE 正则表达式(无需开头结尾的 / 分隔符,包内部会自动包裹)。必须完整匹配整个 Origin 字符串(即隐含 ^...$)。
- 匹配所有子域(泛域名):
'https?://.*\.example\.com'
✅ 允许https://app.example.com、http://api.example.com、https://staging.example.com
❌ 不匹配https://example.com(无子域)或https://evil-example.com - 同时支持主域 + 所有子域:
'https?://(.*\.)?example\.com'
✅ 允许https://example.com和https://shop.example.com - 本地开发多端口(不推荐但可行):
'http://localhost:[0-9]{4,5}'
✅ 匹配http://localhost:3000、http://localhost:8080 - 多个模式可并列:
['https?://.*\.myapp\.com', 'https?://localhost:[0-9]+']
必须配合的关键配置
仅写 patterns 不够,以下三项必须同步设置,否则无效:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
-
'supports_credentials' => true—— 显式开启凭证支持 -
'allowed_origins' => []—— 必须留空数组,否则 patterns 被忽略(包逻辑:非空allowed_origins会优先使用字面量匹配) -
'paths' => ['api/*', 'sanctum/csrf-cookie']—— 确保请求路径命中规则,尤其sanctum/csrf-cookie对带 Cookie 的请求必不可少
常见错误写法
这些写法不会生效或引发安全问题:
-
'https://*.example.com'—— ❌ 这是 glob 模式,不是正则;*在正则里需转义为.* -
'*.example.com'—— ❌ 缺少协议和^$边界,可能误匹配恶意域名 -
'https?://.*example.com'—— ❌ 少了\.,会匹配https://evilexample.com -
['*']放在allowed_origins且supports_credentials => true—— ❌ 浏览器直接拒绝,与 patterns 无关
前端也要同步调整
后端用 patterns 后,前端 fetch 必须带凭证声明:
-
credentials: 'include'—— 保持 Cookie / Authorization 自动发送 - Origin 请求头由浏览器自动加,无需手动设;但确保实际请求 URL 的域名符合你写的正则
- 避免在开发时混用
http://localhost:3000和https://dev.myapp.com却只配了一个 pattern










