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

在Heroku中使用Laravel关联存储目录显示图片(已执行php artisan storage:link)

我之前也碰到过一模一样的问题——软链接明明用php artisan storage:link建好了,但就是加载不出图片,折腾了好一阵才搞定。结合我的踩坑经验,给你梳理几个排查和解决的方向,应该能帮你搞定:

排查与解决步骤

1. 先确认软链接是否真的创建正确

先别着急调配置,先检查软链接本身有没有问题:

  • 直接去项目的public目录下,看看有没有storage这个软链接文件;
  • 或者用命令行验证:
ls -l public/

如果输出里有类似storage -> ../storage/app/public的行,说明链接路径是对的。如果没看到,或者路径不对,先删掉旧链接再重建:

rm public/storage
php artisan storage:link

⚠️ 执行命令时一定要在项目根目录下,别跑错路径了!

2. 检查Web服务器配置(这是最常见的问题!)

大部分时候,软链接无法访问是因为Web服务器默认不允许跟随符号链接,得手动开启:

如果你用的是Nginx:

打开你的站点配置文件(一般在/etc/nginx/sites-available/目录下),确保location /块里加上follow_symlinks on;,同时root要指向项目的public目录。示例配置:

server {
    listen 80;
    server_name your-domain.com;
    root /var/www/your-project/public; # 你的项目public目录路径

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        follow_symlinks on; # 必须加上这一行!
    }

    # 下面是PHP处理的配置,不用动,确保存在就行
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 对应你的PHP版本
    }
}

改完后重启Nginx生效:

sudo systemctl restart nginx

如果你用的是Apache:

要么在虚拟主机配置里,要么在项目根目录的.htaccess文件里,加上允许跟随符号链接的配置:

Options +FollowSymLinks

同时确保你的虚拟主机配置里AllowOverride设置为All,并且加载了mod_rewrite模块。最后重启Apache:

sudo systemctl restart apache2

3. 再核对一遍存储目录的权限

虽然你说改权限没用,但还是要确认是不是用了正确的权限设置——Laravel的storage目录需要让Web服务器的用户(比如www-data、nginx)有读写权限:

# 设置目录所有者为你的用户 + Web服务器用户组
sudo chown -R $USER:www-data storage/ bootstrap/cache/

# 设置目录权限为775,文件为664(安全且够用)
sudo chmod -R 775 storage/ bootstrap/cache/

⚠️ 千万别图省事设成777,安全风险极高!

4. 检查Laravel的文件系统配置

打开config/filesystems.php,确认public磁盘的配置是否正确:

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

重点看url字段,要和你的APP_URL环境变量对应,比如你的站点是http://localhost:8000,这里就应该是http://localhost:8000/storage,这样生成的图片链接才会指向软链接的路径。

5. 清除Laravel缓存

有时候旧的配置缓存会导致新设置不生效,执行这几个命令清一下:

php artisan cache:clear
php artisan config:clear
php artisan route:clear

6. 排查SELinux(仅Linux服务器)

如果你的服务器开启了SELinux,它可能会阻止Web服务器访问软链接指向的目录。可以先临时关闭测试:

sudo setenforce 0

如果图片能正常显示了,就给存储目录设置SELinux规则,之后再开启SELinux:

# 给storage目录添加Web服务器可访问的上下文
sudo chcon -R -t httpd_sys_rw_content_t storage/
# 重新开启SELinux
sudo setenforce 1

按照这个顺序一步步排查,应该能解决软链接无法访问的问题。毕竟软链接省空间的优势确实很香,尤其是多项目复用资源的时候。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:35:22