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

Valet文件URL显示异常:Laravel存储链接本地与服务器访问差异问题

关于Laravel服务器上图片访问路径的问题解答

嘿,我来帮你理清这个问题的来龙去脉~

首先,先明确Laravel中php artisan storage:link的核心作用:这个命令会在项目的public目录下创建一个指向storage/app/public的软链接(也就是public/storage)。所以标准的访问路径应该是/storage/images/image.jpg,因为实际文件存放在storage/app/public/images,通过软链映射到public/storage/images,Web服务器会从public目录读取静态资源,所以这个路径在任何环境下都是正确的。

那为什么本地用Valet时/images/image.jpg也能访问?这是Valet为本地开发提供的便利特性——它会自动把storage/app/public目录加入静态文件的查找路径。也就是说,当你请求/images/image.jpg时,Valet会直接去storage/app/public/images找文件,相当于跳过了软链的路径。但这个是本地开发工具的特殊处理,服务器上的Web服务器(比如Nginx、Apache)不会有这个默认配置,它们只会从项目的public目录下读取静态资源,而你的服务器public目录下并没有直接的images文件夹,所以这个路径自然无法访问。

给你几个实用的解决方案:

  • 统一使用Laravel的URL生成方法:在代码里用asset('storage/images/image.jpg')或者Storage::url('images/image.jpg')来生成图片链接,这两个方法会自动根据环境生成正确的路径,不管是本地Valet还是服务器都能正常访问,避免硬编码路径带来的环境差异问题。
  • 如果非要用/images/...路径(不推荐):可以配置服务器的Web服务规则。比如Nginx的话,在你的站点配置的server块中添加:
    location /images {
        alias /path/to/your/project/storage/app/public/images;
        expires 30d;
    }
    
    Apache的话,可以在项目public目录的.htaccess里添加Alias规则:
    Alias /images /path/to/your/project/storage/app/public/images
    
    不过还是更推荐用Laravel的标准路径,这样项目结构更规范,也减少后续维护的麻烦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:15:09