Laravel 部署后如何修改 public_path 使其指向外层公开目录
解决方案
步骤1:重写public_path指向
打开 app/Providers/AppServiceProvider.php 文件,在 register() 方法中添加以下代码:
$this->app->bind('path.public', function() { // 路径对应项目代码目录外层的public_html目录,可根据实际部署层级调整 return realpath(base_path().'/../public_html'); });
步骤2:调整文件存储配置
打开 config/filesystems.php,修改public存储盘的root参数:
'disks' => [ // 其余磁盘配置保留不修改 'public' => [ 'driver' => 'local', 'root' => public_path('uploads'), // 直接使用调整后的public_path,自动指向public_html下的对应目录 'url' => env('APP_URL').'/uploads', 'visibility' => 'public', 'throw' => false, ], ],
如果你的上传路径使用了自定义磁盘,对应修改自定义磁盘的root参数即可。
步骤3:修复asset()资源路径问题
如果前端通过asset()生成的资源路径前缀错误,直接在.env文件中添加配置:
ASSET_URL=https://你的实际域名
配置修改完成后执行 php artisan config:cache 清理配置缓存即可生效。
备选兼容方案(适用于无法执行Artisan命令的共享主机):
直接在public_html/index.php入口文件开头添加以下代码绑定public路径:$app->bind('path.public', fn() => __DIR__);因为index.php本身存放在public_html目录下,
__DIR__会直接返回public_html的绝对路径,不需要手动写相对路径,兼容性更强。
内容的提问来源于stack exchange,提问作者Osama Amr
相关产品推荐
相关产品推荐

