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

线上服务器/虚拟主机部署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
  • 绑定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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:27:34