Laravel 10部署000webhost后React前端调用API遇CORS错误求助
Laravel 10 + 000webhost部署下CORS错误的解决办法
针对你遇到的CORS问题,按以下步骤排查解决:
1. 确认中间件的正确位置
打开app/Http/Kernel.php,将\Illuminate\Http\Middleware\HandleCors::class添加到全局中间件数组$middleware的最顶部,而不是仅放在api或web中间件组里。这样所有请求(包括CORS预检用的OPTIONS请求)都会经过该中间件处理,避免预检请求被拦截。
2. 配置CORS允许规则
打开config/cors.php,根据你的前端环境修改核心配置项:
return [ 'paths' => ['api/*'], // 匹配所有API路由 'allowed_methods' => ['*'], // 允许所有HTTP方法 'allowed_origins' => ['https://你的React前端域名'], // 替换为实际前端地址,测试阶段可临时用['*'] 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], // 允许所有请求头 'exposed_headers' => [], 'max_age' => 0, 'supports_credentials' => true, // 若前端需携带Cookie或认证信息,设为true ];
3. 清除配置缓存
在000webhost的控制面板终端执行以下命令,确保新配置生效:
php artisan config:cache php artisan cache:clear
Laravel会缓存配置文件,修改cors.php后必须清除缓存才能加载新规则。
4. 检查000webhost服务器配置
部分共享主机自带Apache/Nginx的CORS规则,可能和Laravel中间件冲突。若上述步骤无效,可在项目根目录的.htaccess中添加Apache兼容的CORS规则(仅当主机用Apache时):
Header set Access-Control-Allow-Origin "https://你的React前端域名" Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" Header set Access-Control-Allow-Headers "Content-Type, Authorization"
注意:添加后需确保和Laravel的CORS配置不重复,避免冲突。
关于路由中间件的疑问
不需要在路由中单独指定HandleCors中间件:只要它在全局中间件数组中,所有路由会自动应用;若仅需API路由生效,也可将其加入$middlewareGroups['api']数组,但必须保证OPTIONS预检请求能被正确处理。
你遇到的Status code: (null)错误,通常是因为OPTIONS预检请求未得到正确响应,大概率是配置项错误或缓存未清除导致的,按上述步骤调整后基本能解决。
内容的提问来源于stack exchange,提问作者FrankSDA
相关产品推荐
相关产品推荐

