Laravel 11中修改config/cors.php后需执行php artisan config:clear清除配置缓存才能生效,因框架默认优先加载bootstrap/cache/config.php;若已启用config:cache,还需运行php artisan config:cache重新生成。

在 Laravel 11 中配置 CORS(比如通过 fruitcake/laravel-cors 或原生的 Illuminate\Http\Middleware\HandleCors)后,若修改了 config/cors.php 或相关中间件逻辑,必须清除配置缓存才能让新设置生效——因为 Laravel 启动时默认优先加载 bootstrap/cache/config.php,而不是实时读取 config/ 下的文件。
为什么改了 cors.php 还不生效?
常见原因就是配置缓存没更新。Laravel 11 默认启用配置缓存(尤其在生产环境),config/cors.php 的任何改动(如调整 'allowed_origins'、'supports_credentials' 等)都不会自动反映到运行中,除非手动刷新缓存文件。
清除配置缓存的正确命令
执行以下命令即可删除旧的配置缓存:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
-
php artisan config:clear—— 删除bootstrap/cache/config.php,强制下次请求重新合并所有config/*.php文件 - 如果已在生产环境启用了配置缓存(即之前运行过
config:cache),清完后还需重新生成:php artisan config:cache
注意:config:clear 不影响 .env,也不重读环境变量;它只删那个缓存文件。删完后首次访问会稍慢(因需重新加载和合并配置),但 CORS 设置就会按你改后的 config/cors.php 生效。
顺带检查的关联项
CORS 行为还依赖其他环节,清除配置缓存后若仍异常,可一并确认:
- 确保中间件已注册:检查
app/Http/Kernel.php中HandleCors::class是否在$middleware或对应分组里 - 路由是否应用了中间件:如用
->middleware('cors')显式绑定,或全局启用 - 视图或 API 响应头是否被其他中间件覆盖(比如 Nginx 或 Cloudflare 的 CORS 头)
- 本地开发时,若用 Vite 或前端代理,CORS 实际由前端服务器控制,后端配置可能不触发
开发环境小建议
Laravel 11 开发阶段通常不运行 config:cache,所以只需 config:clear 就够了。改完 config/cors.php 后执行一次,再刷新接口即可验证响应头中 Access-Control-Allow-Origin 等字段是否符合预期。

















