Laravel跨域访问被禁止求助:自定义CORS中间件无效
问题排查与解决思路
首先注意到错误提示里的服务器是Apache/2.4.41 (Ubuntu) Server at localhost Port 1220——这是你前端所在的服务器,说明请求根本没发送到后端Laravel的1240端口,而是被前端Apache拦截返回了403。下面是具体排查步骤:
1. 先确认请求目标是否正确
- 检查前端代码里的接口请求地址,必须是
http://localhost:1240/xxx这类指向后端端口的路径,而不是前端自身的1220端口路径。如果请求路径写错,就会被前端Apache处理,直接抛出403。
2. 排查前端Apache的配置问题
- 如果你前端是用Apache托管的,检查对应的虚拟主机配置文件(比如
/etc/apache2/sites-available/000-default.conf),确认没有路径规则误拦截跨域请求。 - 检查是否启用了
mod_security这类安全模块,若启用,临时关闭后测试是否还会出现403,排除规则误拦截的可能。 - 检查前端文件目录的权限,确保Apache进程有访问权限(建议目录权限设为
755,文件权限设为644)。
3. 重新梳理后端CORS配置(排除后端问题)
既然之前用fruitcake/laravel-cors无效,先清理自定义配置,恢复官方包的正确流程:
- 移除你自定义的CORS中间件,以及
Kernel.php中所有相关的配置项,避免冲突。 - 重新配置
fruitcake/laravel-cors:- 发布配置文件:
php artisan vendor:publish --tag="cors" - 修改
config/cors.php,针对性配置前端来源:return [ 'paths' => ['api/*'], // 根据你的接口路径调整,也可以用['*']允许所有路径 'allowed_methods' => ['*'], 'allowed_origins' => ['http://localhost:1220'], // 明确指定前端地址 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], 'exposed_headers' => [], 'max_age' => 3600, 'supports_credentials' => false, ]; - 在
app/Http/Kernel.php的$middlewareGroups['api']数组最前面添加:\Fruitcake\Cors\HandleCors::class,
- 发布配置文件:
4. 验证后端接口可用性
- 用Postman直接请求后端接口(比如
http://localhost:1240/api/test),如果能正常返回数据,说明后端配置没问题,问题完全出在前端请求环节或前端Apache拦截;如果Postman也报错,再排查后端路由、中间件的优先级配置。
内容的提问来源于stack exchange,提问作者Kawin Cheong
相关产品推荐
相关产品推荐

