部署至Plesk后storage目录图片无法显示问题求助
解决Plesk部署Laravel后Storage图片无法显示的问题
核心问题分析
问题大概率是网站根目录设置错误或存储软链接路径不匹配导致的,Laravel要求网站根目录指向项目的public文件夹,同时public/storage软链接必须正确指向storage/app/public。
解决方案步骤
1. 修正Plesk的网站根目录设置
登录Plesk后台,找到对应域名的「主机设置」,将文档根目录修改为:/home_directory/public_html/my_project/public
这是关键:Laravel的入口文件(index.php)在
public目录下,只有将网站根指向这里,路由和静态资源访问才会正常。
2. 重新创建正确的存储软链接
之前通过路由创建的链接可能因执行目录错误导致路径失效,推荐两种方式修复:
方式一:通过Plesk终端执行命令
- 进入项目根目录:
cd /home_directory/public_html/my_project - 执行存储链接命令:
php artisan storage:link
方式二:修改路由确保执行目录正确
如果无法使用终端,修改你的路由代码,强制切换到项目根目录后再执行命令:
Route::get('/foo', function () { chdir(base_path()); // 切换到Laravel项目根目录 Artisan::call('storage:link'); return '存储链接已重新创建'; });
访问你的域名/foo执行后,删除该路由避免安全风险。
3. 验证软链接与路径
- 检查
public_html/my_project/public目录下是否存在storage软链接,查看其指向路径应为../storage/app/public。 - 若软链接指向错误,手动删除后重新执行
storage:link命令。
4. 检查目录权限
确保以下目录权限正确:
storage/app/public:权限设置为755public/storage:权限设置为755- 所有图片文件权限设置为
644
权限不足会导致web服务器无法读取图片文件,Plesk中可通过文件管理器右键目录/文件修改权限。
5. 验证图片访问URL
你的代码中生成的URL逻辑是正确的:
$project->cover_image = url('storage', $coverImagePath);
当网站根指向public目录后,url('storage')会正确指向public/storage软链接,从而访问到storage/app/public下的图片。
内容的提问来源于stack exchange,提问作者Hager Khaled
相关产品推荐
相关产品推荐

