如何在共享托管线上服务器中正常显示Laravel应用上传的图片
问题根因
本地环境Laravel默认的公开目录是项目根目录下的public,你部署到共享主机后,将对外可访问的资源放到了public_html,核心代码放到了main目录,Laravel默认的路径配置没有同步更新,导致:
- 上传的图片被存到了
main/public/upload目录下,不在对外可访问的public_html里 - 视图生成的图片访问路径和实际存储路径不匹配
解决方案
按顺序操作即可解决:
- 绑定正确的公开目录路径
打开main/bootstrap/app.php文件,在末尾添加以下代码,将Laravel的公开目录指向你实际的public_html:
$app->bind('path.public', function() { // 请根据你main和public_html的实际层级调整路径,以下是两者同级时的配置 return realpath(__DIR__.'/../../public_html'); });
- 修正站点域名配置
打开main/.env文件,将APP_URL参数修改为你的线上站点实际域名,比如:
APP_URL=https://www.your-domain.com
- 调整目录权限
将public_html/upload目录的权限设置为755,保证web服务器拥有该目录的读取、写入权限,共享主机可直接在文件管理器中右键修改权限。 - 迁移已上传的历史图片
如果之前已经上传过图片,把main/public/upload目录下的所有文件移动到public_html/upload目录下,旧图片即可正常访问。 - (可选)优化资源路径生成
将视图中生成图片路径的url()辅助函数替换为更适合静态资源的asset(),同时修正你代码里重复写width的样式问题:
<img src="{{ (!empty($portfolio->image))? asset('upload/portfolio_images/'.$portfolio->image):asset('upload/no_image.jpg') }}" style="width: 60px; height: 60px;">
内容的提问来源于stack exchange,提问作者Green looker
相关产品推荐
相关产品推荐

