修改 .env 后需清配置缓存或重启服务才生效,开发环境执行 php artisan config:clear,生产环境还需重载 opcache;app_key 不可随意更改,db_password 等含特殊字符须用双引号包裹。

.env 文件不是代码,改它不触发重载,必须清缓存或重启服务才能生效
修改 .env 后页面没变化?先清 Laravel 配置缓存
Laravel 启动时会把 .env 里的值读进内存并缓存到 bootstrap/cache/config.php。直接改 .env 不影响运行中的配置。
- 开发环境(本地):执行
php artisan config:clear即可 - 生产环境:必须同时清缓存 + 重载 OPcache(如果启用),否则可能卡在旧值
- 别用
php artisan config:cache来“刷新”——它只从当前缓存里再打包一次,不会重新读.env - 有些 Docker 部署会挂载
.env为只读,改了也写不进去,得检查容器权限
APP_KEY 不能随便改,但 APP_DEBUG 可以随时开关
APP_KEY 是加密盐,一旦项目已有加密数据(如 Cookie、remember_token),改了会导致所有用户登出、队列失败、解密报错 DecryptException。
- 新项目初始化:用
php artisan key:generate自动生成,别手写 - 已有项目要换密钥:必须同步迁移所有已加密数据,现实中几乎不操作
-
APP_DEBUG=true只影响异常页面展示,改完立刻生效(前提是清了 config 缓存),适合临时排查 -
DB_PASSWORD等敏感字段含特殊字符(如#、$、空格)必须用双引号包裹:DB_PASSWORD="p@ss#word!"
不同环境共用一份 .env?用 .env.[environment] 替代
Laravel 默认只读 .env,但你可以通过 APP_ENV=production 触发加载 .env.production,优先级高于基础文件。
- 部署时用
APP_ENV=staging php artisan config:cache,它会合并.env+.env.staging - 不要在
.env里写条件判断或变量引用(比如API_URL=${APP_URL}/api),Laravel 原生不支持 shell 式变量展开 - CI/CD 中建议把环境变量直接注入运行时(如 GitHub Actions 的
env:),而不是生成临时.env文件 -
.env.local不是 Laravel 官方机制,某些 IDE 或工具会识别,但 Laravel 本身忽略它
环境变量的加载时机很早,在服务启动前就完成了;哪怕只是改了个空格,也要确认缓存是否清除干净,不然查半天发现是 config.php 还在用旧值。











