Laravel .env文件是否继承服务器环境变量?
Laravel .env与服务器环境变量的优先级关系
核心原因很明确:服务器系统级环境变量的优先级高于Laravel项目里的.env文件变量。
当你在服务器层面设置了某个环境变量后,Laravel启动时会优先读取这个服务器变量,完全忽略.env文件里的同名变量——这就是你修改.env没效果的直接原因。反之,如果服务器上没有对应变量,Laravel就会读取.env里的配置值,所以单独用.env时修改能正常生效。
具体加载顺序如下:
- Laravel启动时,先加载服务器的环境变量(包括系统全局变量、Web服务器配置的变量,比如Nginx/Apache里设置的
fastcgi_param,或者Docker容器环境变量等) - 之后才会加载项目根目录的
.env文件,但如果某个变量已经在服务器环境中存在,Laravel不会覆盖它,直接使用服务器端的数值
举个实际例子:你在服务器上设置了APP_URL=https://prod.example.com,然后把.env里的APP_URL改成https://test.example.com,此时Laravel输出的env('APP_URL')还是服务器设置的https://prod.example.com,因为服务器变量优先级更高。
如果想验证当前生效的环境变量,可以在项目根目录执行php artisan env命令,或者在代码里打印env('变量名')来确认来源。
要是想让.env里的变量生效,你需要删除服务器上对应的同名环境变量,这样Laravel才会 fallback 到.env的配置。
内容的提问来源于stack exchange,提问作者Tadas V.
相关产品推荐
相关产品推荐

