线上服务器/虚拟主机部署Laravel如何配置Symbolik Link
Laravel 部署时storage目录移至项目外public_html的软链接配置方案
虚拟主机/独立服务器部署Laravel时,为了安全通常会把核心代码放在web根目录(public_html)之外,如果你已经把storage目录整体移动到了public_html目录下,按以下场景配置软链接即可,全程用绝对路径,不要用相对路径避免链接失效。
安全提醒:不建议将完整storage目录直接放在web可访问的public_html下,storage内的日志、框架缓存、临时密钥等文件如果权限配置不当会直接泄露敏感信息。最优实践是仅将需要公开访问的
storage/app/public目录映射到web路径,其余非公开storage文件放在web目录外。如果受虚拟主机规则限制必须放在public_html下,请额外配置站点规则禁止访问storage下非public子目录的内容。
有SSH权限的独立服务器/云主机配置
- 清理旧路径
先删除原项目目录下残留的storage文件夹或失效软链接,保证项目核心目录下的storage路径不存在,否则创建软链接时会报已存在错误。 - 创建软链接
假设你的目录结构如下(替换成你自己的实际绝对路径):- 项目核心目录(非web可访问):
/home/your_account/laravel_core - web根目录(public_html):
/home/your_account/public_html - 移动后的storage真实路径:
/home/your_account/public_html/storage
执行以下命令创建软链接:ln -s /home/your_account/public_html/storage /home/your_account/laravel_core/storage
- 项目核心目录(非web可访问):
- 绑定Laravel的storage路径
为了避免后续执行php artisan storage:link时回退到默认路径,打开项目下的app/Providers/AppServiceProvider.php,在boot方法中添加一行代码绑定storage路径:
public function boot() { // 原有业务代码保持不变 $this->app->useStoragePath(base_path('../public_html/storage')); }
- 生成公开访问链接
因为Laravel默认的公开资源访问路径是web入口下的storage路径,进入项目核心目录执行artisan命令生成公开访问软链接:php artisan storage:link
执行完成后public_html下会自动生成对应的storage软链接,指向storage/app/public目录。
无SSH权限的虚拟主机配置
如果虚拟主机不提供命令行权限,选以下任意一种方式即可:
- 方式1:PHP脚本创建软链接
在public_html目录下新建symlink.php文件,写入以下代码,路径替换成你自己的实际绝对路径:
<?php $storageRealPath = '/home/your_account/public_html/storage'; $projectStorageLinkPath = '/home/your_account/laravel_core/storage'; if (file_exists($projectStorageLinkPath)) { exit("storage链接已存在,无需重复创建"); } if (symlink($storageRealPath, $projectStorageLinkPath)) { echo "软链接创建成功,请及时删除本脚本文件"; } else { echo "创建失败,请检查两个路径的读写权限"; }
通过浏览器访问https://你的域名/symlink.php执行脚本,看到成功提示后立刻删除这个PHP文件,避免留安全隐患。后续记得在AppServiceProvider里绑定storage路径,和SSH配置步骤的路径绑定逻辑一致。
- 方式2:面板自带功能创建
如果你用的是cPanel、DirectAdmin、宝塔等面板,直接打开文件管理器,找到「创建符号链接/软链接」功能,选择目标为public_html下的storage目录,链接路径填项目核心目录下的storage位置,点击确认即可自动生成。
配置验证
- 添加临时测试路由验证是否生效:
Route::get('/storage-test', function () { Storage::disk('public')->put('test.txt', 'storage配置生效'); return redirect('/storage/test.txt'); });
- 访问对应路由如果能正常显示写入的文本内容,说明配置正确。
- 最后给storage目录设置正确权限:目录权限755,文件权限644,保证web运行用户对storage目录有读写权限即可。
内容的提问来源于stack exchange,提问作者Badman
相关产品推荐
相关产品推荐

