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

Laravel部署:将public目录移至根目录后如何创建有效storage链接?

解决Hostinger虚拟主机Laravel项目Storage链接失效问题

根据你的部署结构(子域名指向/blog,Laravel核心文件在/blog/laravel,public目录内容移至/blog),以下是可行的解决方法:

方法一:修改Laravel配置后执行artisan命令

Laravel默认的public_path指向项目根目录下的public文件夹,现在你的public目录已移至/blog,需要先修正这个路径:

  1. 编辑/blog/laravel/app/Providers/AppServiceProvider.php,在boot()方法中添加路径绑定代码:
    public function boot()
    {
        $this->app->bind('path.public', function() {
            return base_path('../../blog');
        });
    }
    
  2. 通过SSH登录主机,进入Laravel根目录:
    cd /blog/laravel
    
  3. 执行storage链接命令:
    php artisan storage:link
    
    此命令会在/blog目录下创建storage符号链接,指向/blog/laravel/storage/app/public。

方法二:SSH手动创建绝对路径符号链接

之前使用ln -s失败大概率是路径错误,需使用服务器绝对路径执行:

ln -s /home/你的主机用户名/public_html/blog/laravel/storage/app/public /home/你的主机用户名/public_html/blog/storage

注意:替换你的主机用户名为实际的Hostinger账户用户名,可通过主机面板查看账户信息确认绝对路径。

方法三:修正PHP脚本创建链接

调整之前的脚本,确保路径准确并增加错误检查:

  1. 在/blog目录下创建create_storage_link.php文件,内容如下:
    <?php
    $targetFolder = $_SERVER['DOCUMENT_ROOT'] . '/laravel/storage/app/public';
    $linkFolder = $_SERVER['DOCUMENT_ROOT'] . '/storage';
    
    if (!file_exists($targetFolder)) {
        die('错误:目标目录不存在 - ' . $targetFolder);
    }
    if (file_exists($linkFolder)) {
        die('错误:链接已存在,请先删除 - ' . $linkFolder);
    }
    
    if (symlink($targetFolder, $linkFolder)) {
        echo 'Storage链接创建成功!';
    } else {
        echo '创建失败,请检查目录权限或联系主机商确认是否允许创建符号链接';
    }
    ?>
    
  2. 通过浏览器访问该脚本(如https://你的子域名/create_storage_link.php),执行完成后立即删除此文件。

注意事项

  • 确保/blog/laravel/storage/app/public目录存在,权限设置为755或775
  • 创建链接后,测试访问存储的文件(如https://你的子域名/storage/test.jpg)验证是否正常
  • 若存在旧的无效链接,需先删除/blog/storage(仅删除符号链接,勿删除实际存储目录)

内容的提问来源于stack exchange,提问作者Luke V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:55:22