Laravel部署至Apache服务器后图片链接异常问题求助
嘿,我之前也碰到过一模一样的问题,咱们一步步来排查解决:
先确认服务器上的软链接是否真的创建成功
本地执行的php artisan storage:link不会自动同步到服务器(毕竟软链接是本地文件系统的关联)。你得登录服务器,进入项目根目录手动执行:php artisan storage:link执行完去
public目录下看看,有没有storage这个软链接,它应该指向../storage/app/public。如果创建失败,大概率是服务器用户没有写入public目录的权限。检查目录与文件的权限设置
Apache运行的用户(通常是www-data)需要对storage目录和软链接对应的目标目录有读写权限。可以执行以下命令调整:# 把目录所属用户改成Apache运行用户 chown -R www-data:www-data storage public/storage # 设置目录权限为755,文件权限为644 chmod -R 755 storage chmod -R 644 storage/app/public/photos/*确保Apache允许跟随软链接
打开Apache的虚拟主机配置文件或者项目根目录的.htaccess文件,检查是否有允许跟随软链接的配置。如果没有,添加或修改:
在虚拟主机的<Directory>块里加上:Options +FollowSymLinks或者在
.htaccess中添加同样的内容,修改后记得重启Apache:sudo systemctl restart apache2检查视图中图片的访问URL是否正确
一定要用Laravel的asset()函数生成图片链接,比如:<img src="{{ asset('storage/photos/' . $photoName) }}" alt="用户照片">别直接写相对路径,
asset()会根据你的APP_URL配置生成正确的绝对URL,避免服务器根目录差异导致的路径错误。排查SELinux的限制(如果服务器开启了SELinux)
不少Linux服务器默认开着SELinux,它会阻止Apache访问非标准目录。可以先临时关闭测试:sudo setenforce 0如果图片能正常访问了,就设置SELinux上下文让Apache有权限访问storage目录:
chcon -R -t httpd_sys_rw_content_t storage/这样就能永久解决SELinux的限制问题。
确认文件是否真的上传成功
去服务器的storage/app/public/photos目录下看看,有没有上传的图片文件。如果这里都没有文件,那问题出在上传逻辑,而不是访问路径上。
内容的提问来源于stack exchange,提问作者mariobros

