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

Symfony 5 API关闭debug模式后跨子域请求出现CORS错误

问题原因
  1. 跨域配置规则不匹配:你的nelmio_cors.yaml中开启了origin_regex: true参数,该参数要求allow_origin的取值必须为正则表达式格式,但你填写的是普通域名字符串。Debug模式下框架自带容错机制,不会严格校验规则,因此跨域配置可以正常生效;关闭Debug进入严格的生产模式后,规则校验不通过,导致跨域配置失效,响应头不会返回Access-Control-Allow-Origin相关字段。
  2. 生产环境配置缓存未更新:Symfony生产环境会将所有配置、容器编译结果缓存到本地,Debug模式下会自动检测配置变更并刷新缓存;关闭Debug后如果没有手动清理过缓存,修改后的跨域配置不会被加载。
  3. OPcache缓存旧配置:生产环境通常会开启PHP OPcache缓存编译后的PHP文件,你的.env.local.php或容器配置可能被OPcache缓存,导致新配置没有生效。
解决方案
  • 修正nelmio跨域配置,两种方案二选一即可:
    1. 关闭origin_regex参数,保留原域名字符串配置:
    nelmio_cors:
        defaults:
            origin_regex: false # 关闭正则匹配,支持直接填写完整域名
            allow_credentials: true
            allow_origin: ['https://api.mamacita365.com', 'https://app.mamacita365.com']
            allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
            allow_headers: ['Content-Type', 'Authorization']
            expose_headers: ['Link']
            max_age: 3600
        paths:
            '^/': null
    
    1. 保留origin_regex: true,将allow_origin改为符合要求的正则格式:
    allow_origin: ['^https://api\.mamacita365\.com$', '^https://app\.mamacita365\.com$']
    
  • 清理Symfony生产环境缓存,在项目根目录执行以下命令:
    php bin/console cache:clear --env=prod
  • 重启PHP-FPM服务或重置OPcache,清除旧的PHP文件编译缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:06:04