laravel生产环境css 404的根本原因是apache未启用mod_rewrite模块且documentroot未指向public目录;需执行sudo a2enmod rewrite并重启apache,将documentroot设为public绝对路径,启用allowoverride all,并在blade中使用asset()函数引用资源。

Laravel生产部署后CSS全部404,不是代码写错了,而是服务器根本没把请求正确导向public目录下的真实文件——浏览器明明在请求/css/app.css,Apache却在项目根目录里找css子目录,当然返回404;你看到控制台报错GET http://yoursite.com/css/app.css 404,本质是Web服务器配置和Laravel设计规范彻底脱节。
确认Apache是否启用mod_rewrite模块
这一步必须做,90%的CSS 404都卡在这儿。Laravel靠它把 /css/app.css 这种请求直接映射到 public/css/app.css,否则Apache当普通路径查,必然404。
执行命令启用重写模块:sudo a2enmod rewrite
【必须重启Apache,仅启用模块不重启无效】
重启服务:sudo systemctl restart apache2
检查DocumentRoot是否指向public目录
如果DocumentRoot还设在/var/www/html/myapp这种项目根路径,所有静态资源请求都会失败——/css/app.css会被解析成/var/www/html/myapp/css/app.css,而真实文件其实在/var/www/html/myapp/public/css/app.css。
打开虚拟主机配置文件(如/etc/apache2/sites-available/myapp.conf)
把DocumentRoot改为项目public目录的绝对路径,例如:DocumentRoot /var/www/html/myapp/public
同时确认<directory></directory>块中AllowOverride All已启用,否则.htaccess里的重写规则压根不生效。
验证Blade模板中是否用了asset()函数
方法一:检查资源引用是否硬编码相对路径
错误写法:<link href="css/app.css" rel="stylesheet">——访问/admin/users时浏览器会去加载/admin/css/app.css,直接404。
正确写法:<link href="%7B%7B%20asset('css/app.css')%20%7D%7D" rel="stylesheet">——asset()自动拼出完整URL前缀,适配子目录和HTTPS。
方法二:检查APP_URL环境变量是否误设为API域名
API项目常把APP_URL=https://api.example.com,结果asset()生成的路径变成https://api.example.com/css/app.css——而前端静态文件根本不在API域名下托管。
应改为前端域名,例如APP_URL=https://www.example.com。
运行构建命令并检查mix.manifest.json
第一步:进入项目根目录,执行npm run production
这一步生成压缩后的JS/CSS文件和public/mix.manifest.json,仅composer install不会触发构建,漏掉就必然404。
第二步:检查public/mix.manifest.json是否存在且内容合法
文件应为标准JSON格式,类似{"\/js\/app.js":"\/js\/app.js?id=abc123"};若为空、损坏或缺失,mix()函数将返回空字符串或404路径。
第三步:确认php artisan storage:link已执行
该命令只在public目录下创建软链接,如果DocumentRoot没指向public,链也白搭。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











