You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:
    1. 发布配置文件:
      php artisan vendor:publish --tag="cors"
      
    2. 修改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,
      ];
      
    3. 在app/Http/Kernel.php的$middlewareGroups['api']数组最前面添加:
      \Fruitcake\Cors\HandleCors::class,
      

4. 验证后端接口可用性

  • 用Postman直接请求后端接口(比如http://localhost:1240/api/test),如果能正常返回数据,说明后端配置没问题,问题完全出在前端请求环节或前端Apache拦截;如果Postman也报错,再排查后端路由、中间件的优先级配置。

内容的提问来源于stack exchange,提问作者Kawin Cheong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:47:07