部署Laravel项目时静态资源路径为什么需要添加public前缀?
Laravel资源路径需加/public前缀问题解决方案
核心原因
你的Web服务器站点根目录配置错误,指向了Laravel项目根目录而非框架要求的public目录,这是你被迫移动index.php到根目录、资源路径需要额外加/public前缀的根本原因,该配置还存在安全风险:Laravel根目录下的.env等敏感配置文件会被直接公开访问。
本地环境使用php artisan serve启动服务时默认会将public作为服务根目录,所以本地资源路径无需加前缀,和服务器配置不一致导致出现路径差异。
修复步骤
- 修正Web服务器站点根目录配置:
- Nginx环境:修改站点配置中的
root参数,指向Laravel项目的public目录,示例:root /var/www/your-project/public; - Apache环境:修改VirtualHost配置中的
DocumentRoot参数,指向项目的public目录 - 面板类环境(宝塔、cPanel等):在站点设置的「运行目录/根目录」选项中选择
public目录
- Nginx环境:修改站点配置中的
- 恢复Laravel默认目录结构:将你移动到项目根目录的
index.php移回public目录,还原server.php和index.php的原有配置,不要手动修改框架默认的入口文件 - 统一资源引用规范:
- Blade模板中引用静态资源统一使用Laravel自带的
asset()辅助函数,示例:<link href="{{ asset('css/app.css') }}" rel="stylesheet">,框架会自动拼接正确的站点根路径 - CSS文件内的资源引用使用相对路径即可,示例:
background: url(../assets/images/curve.webp) !important;,无需写绝对路径避免前缀错误
- Blade模板中引用静态资源统一使用Laravel自带的
验证效果
配置完成后重启Web服务器,访问站点无需再加/public前缀即可正常加载所有资源,同时也修复了敏感文件暴露的安全隐患。
内容的提问来源于stack exchange,提问作者Adnan Nawaz
相关产品推荐
相关产品推荐

