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

Laravel中storage与public间符号链接无法访问问题求助

解决Laravel符号链接无法访问文件的问题

我之前迁移Laravel项目到独立服务器时,也碰到过几乎一模一样的符号链接问题!结合我的排查经验,给你几个靠谱的解决方向:

1. 检查文件/目录权限

这是最常见的坑,Apache或Nginx的运行用户(通常是www-data、apache或者nginx)需要拥有对源目录和符号链接本身的读取权限:

  • 先给源目录设置合理权限,目录设为755,文件设为644:
    chmod -R 755 /home/username/project/storage/app/public/receipts
    chmod -R 644 /home/username/project/storage/app/public/receipts/*
    
  • 确保符号链接的父目录public_html权限正确:
    chmod 755 /home/username/public_html
    
  • 最后调整目录所属用户组,让Web服务器用户能访问:
    # 假设Web运行用户是www-data
    chown -R username:www-data /home/username/project/storage/app/public/receipts
    

2. 检查Web服务器的符号链接配置

如果权限没问题,大概率是Web服务器默认禁止了跟随符号链接:

  • Apache:在public_html的配置文件或.htaccess中添加Options +FollowSymLinks,之后重启Apache:
    <Directory /home/username/public_html>
        Options +FollowSymLinks
        AllowOverride All
    </Directory>
    
  • Nginx:在server块中加入disable_symlinks off;,确保root指向public_html,然后重启Nginx:
    server {
        root /home/username/public_html;
        disable_symlinks off;
        # 其他配置项...
    }
    

3. 验证符号链接的正确性

有时候看起来创建成功,但实际指向的路径有误:

  • 用命令查看符号链接的真实指向:
    ls -l /home/username/public_html/storage
    # 正确输出应该是:storage -> /home/username/project/storage/app/public/receipts
    
  • 如果路径不对,先删除旧链接再重新创建:
    rm /home/username/public_html/storage
    ln -s /home/username/project/storage/app/public/receipts /home/username/public_html/storage
    

4. 检查SELinux状态(若服务器开启)

部分服务器默认开启SELinux,会阻止Web服务器访问符号链接指向的目录:

  • 先临时关闭SELinux测试:
    setenforce 0
    
  • 如果关闭后能访问了,给源目录添加正确的SELinux上下文:
    chcon -R -t httpd_sys_content_t /home/username/project/storage/app/public/receipts
    
  • 也可以永久修改SELinux配置(编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive)

按照上面的步骤排查,应该就能解决问题了!我当时就是Apache没开FollowSymLinks加上权限没配置对,折腾了好一会儿才搞定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:24:03