laravel部署后样式丢失主因是web服务器根目录未指向public目录、mod_rewrite未启用或asset()协议感知异常;需将documentroot设为public路径、启用allowoverride all和rewrite模块,并在本地环境强制https方案。

不是 Laravel 写错了 CSS,而是 Laragon 默认没把 Web 服务器根目录设对、没启用重写、也没配好 asset() 的协议感知——三者缺一都会让 /css/app.css 返回 404 或加载空白。
确认 Laragon 的 DocumentRoot 是否指向 public 目录
Laragon 默认新建项目时,会把虚拟主机的根目录设在项目文件夹顶层(如 D:\laragon\www\myapp),但 Laravel 要求必须是 public 子目录。否则浏览器请求 /css/app.css,Apache 实际去查的是 D:\laragon\www\myapp\css\app.css,当然 404。
- 打开 Laragon 主界面 → 右键你的站点 → Edit Virtual Host
- 找到
DocumentRoot和<directory></directory>两处路径,确保都改成带/public的完整路径,例如:DocumentRoot "D:/laragon/www/myapp/public"<directory></directory> - 保存后点击 Laragon 工具栏的 Reload Apache(不是 Restart)
检查 .htaccess 是否生效 & mod_rewrite 是否启用
Laragon 自带 Apache,但默认不强制开启 rewrite 模块;且即使启用了,若 <directory></directory> 块里没设 AllowOverride All,public/.htaccess 里的重写规则也不会执行。
- 打开刚才编辑的虚拟主机配置文件(通常在
D:\laragon\etc\apache2\sites-enabled\下),确认<directory></directory>区块内包含:AllowOverride AllRequire all granted - 检查 rewrite 模块是否启用:打开
D:\laragon\bin\apache\conf\httpd.conf,搜索mod_rewrite,确认这行未被注释:LoadModule rewrite_module modules/mod_rewrite.so - 改完记得 Reload Apache
Asset 函数在 Laragon 本地环境要强制 HTTPS 感知
Laragon 常用 https://myapp.test 访问,但 PHP 有时拿不到正确的 HTTPS 环境变量,导致 asset() 生成 http:// 链接,被浏览器拦截或跳转失败。
- 打开
app/Providers/AppServiceProvider.php,在boot()方法中加入:
if ($this->app->environment('local')) {
URL::forceScheme('https');
}
- 同时确保
.env中APP_URL=https://myapp.test(协议必须匹配你实际访问的地址) - 运行
php artisan config:clear清除配置缓存
验证 public/css/app.css 是否真实存在且可读
别跳过这步——很多“CSS 加载失败”其实是构建根本没跑,文件压根不存在。
- 进项目根目录,运行:
ls -l public/css/app.css(Windows 可用dir public\css\app.css) - 如果不存在,说明还没执行
npm run production;如果存在但时间很旧,说明改了 CSS 却没重新构建 - 手动访问
https://myapp.test/css/app.css,能直接下载内容才说明路径和权限都通
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











