升级至Laravel 9后新上传图片无法显示求助
Laravel 7 升级到 9 后新上传图片404问题排查方案
检查文件与目录权限
新上传的文件可能因权限不足导致web服务器无法读取。执行以下命令调整权限(根据服务器运行用户替换www-data:www-data,比如apache:apache或nginx:nginx):# 递归设置目录所属用户组 chown -R www-data:www-data storage/app/public/uploads # 设置目录权限为755,文件权限为644 find storage/app/public/uploads -type d -exec chmod 755 {} \; find storage/app/public/uploads -type f -exec chmod 644 {} \;确认符号链接有效性
自动执行php artisan storage:link可能因路径问题失效,手动创建绝对路径的符号链接更可靠:ln -s /绝对路径/项目目录/storage/app/public /绝对路径/项目目录/public/storage创建后可以通过
ls -l public/storage查看链接是否指向正确路径。验证文件系统配置
打开config/filesystems.php,确保public磁盘的配置正确:'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],同时确认上传代码中使用了
public磁盘,例如:Storage::disk('public')->put('uploads/目标路径', $file);检查web服务器重写规则
- Apache:确认
public/.htaccess中的重写规则正确,确保请求能正确路由到public目录:RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] - Nginx:确保站点配置中root指向项目的
public目录,且包含正确的try_files规则:server { root /绝对路径/项目目录/public; location / { try_files $uri $uri/ /index.php?$query_string; } }
配置修改后重启web服务器生效。
- Apache:确认
清理服务器/CDN缓存
如果使用了CDN或服务器缓存(如Opcache),刷新缓存以确保新上传的文件能被正确识别:- 重启php-fpm或web服务器清理Opcache
- 在CDN控制台刷新对应域名的缓存
内容的提问来源于stack exchange,提问作者Urget
相关产品推荐
相关产品推荐

