【问题标题】:Change default "symbolic link" folder in laravel 5.4 (storage folder)更改 laravel 5.4 中的默认“符号链接”文件夹(存储文件夹)
【发布时间】:2026-01-02 09:20:03
【问题描述】:

我正在使用 laravel 5.4 制作我的网站的新版本,并希望保留与旧网站相同的链接。

我的旧网站有这样的链接图片: domain.com/uploaded/cat.jpg

在 laravel 中,需要创建一个 符号链接 来显示存储的图像,但它会将它们保存在一个名为 storage" 的默认文件夹中,如下所示: domain.com/storage/cat.jpg

如何将默认名称更改为“已上传”或其他名称?

我尝试使用以下内容更改文件 \config\filesystems.php 中的 url

之前

'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

之后

'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/uploaded',
        'visibility' => 'public',
    ],

和我的控制器

$request->file('image')->storeAs('public', 'example.jpg');

【问题讨论】:

    标签: php laravel hyperlink storage directory


    【解决方案1】:

    确保您已创建符号链接。

    根据你的配置,你可以运行这个命令:

    ln -s storage/app/public public/uploaded
    

    然后,您可以访问您的文件:

    Storage::disk('public')->url('example.jpg')
    

    或者干脆使用asset() helper:

    asset('uploaded/example.jpg');
    

    【讨论】:

    • 将文件保存在“storage/public”(符号链接)和真正的公用文件夹有什么区别?
    • 没有区别,但它是文件系统的约定-This convention will keep your publicly accessible files in one directory that can be easily shared across deployments when using zero down-time deployment systems like Envoyer.From the docs
    • 我无法运行 thar 命令。它适用于Linux,对吗?我有窗户
    • 确实适用于 Linux/Mac,但存在类似的 Windows 命令,请尝试:mklink /d public\uploaded storage\app\public(Windows 的参数交换)
    【解决方案2】:

    使用任何 php 文件在您的服务器中执行此代码以创建符号链接。创建链接后,这些文件将可公开访问。

    target = '/home/cfrcoclm/public_html/agencies/storage/app/public'
    快捷方式 = '/home/cfrcoclm/public_html/agencies/uploaded' 符号链接(目标,快捷方式) ec ho("链接已创建!") `

    【讨论】:

      【解决方案3】:

      如果您没有 SSH 访问权限,您也可以在下面编写这个单行脚本并在您的服务器上运行它 - 考虑正确的目录路径

      symlink('/home/domainname/laravelprojectname/storage/app/public','/home/domainname/public_html/storage');

      【讨论】: