Laravel 7.x Docker环境下无storage:link时storage目录访问问题求助
解决Docker环境下Laravel旧项目静态资源访问问题
下面给几个不用修改前端代码就能解决的方案,适配你的Laravel 7.x项目:
Nginx反向代理配置(推荐,性能最优)
如果你的Docker环境用Nginx做Web服务,直接修改Nginx配置文件,添加一段location规则,把/storage/app/public开头的请求直接映射到项目的实际存储目录:location ~ ^/storage/app/public/(.*)$ { alias /var/www/html/storage/app/public/$1; # 替换成你容器内Laravel项目的实际路径 try_files $uri $uri/ =404; expires 30d; # 可选,给静态资源添加缓存策略 }修改完成后重启Nginx容器,刷新页面即可正常访问资源。
Laravel路由兜底处理
不想调整Web服务配置的话,直接在routes/web.php中添加一段路由,专门处理这类静态资源请求:Route::get('storage/app/public/{path}', function ($path) { $file = storage_path('app/public/' . $path); if (!file_exists($file)) { abort(404); } return response()->file($file); })->where('path', '.*');这段代码会自动捕获所有
/storage/app/public/开头的请求,读取对应storage目录下的文件并返回,完全不需要修改前端模板代码。容器内手动调整权限(临时应急)
本地开发应急使用的话,可以进入PHP容器,调整storage目录的权限,让Web服务用户能正常访问:docker exec -it 你的PHP容器名 chown -R www-data:www-data /var/www/html/storage docker exec -it 你的PHP容器名 chmod -R 755 /var/www/html/storage
内容的提问来源于stack exchange,提问作者Baltrek
相关产品推荐
相关产品推荐

