Laravel静态资源404的根源是Web服务器未将DocumentRoot指向public子目录,导致请求未经public/index.php处理;需确认Laragon中DocumentRoot、<Directory>路径、mod_rewrite启用、.htaccess存在且AllowOverride All已配置,并运行npm run production和php artisan storage:link。

静态资源404,大概率是 Laragon 没把网站根目录指向 public 子目录,导致浏览器直接请求 /css/app.css 时,Apache 找不到文件,也不经过 public/index.php 入口处理。
确认 Laragon 的 DocumentRoot 是否为 public
Laragon 默认不会自动把虚拟主机的 DocumentRoot 设到 public,它通常指向项目根目录(含 app/、routes/ 等),这既不安全,也必然导致 CSS/JS 404。
- 打开
laragon/etc/apache2/sites-enabled/your-domain.test.conf(比如myapp.test.conf) - 检查
DocumentRoot行,必须是类似:DocumentRoot "D:/laragon/www/myapp/public" - 同时确认下方
<Directory>路径也同步改成"D:/laragon/www/myapp/public" - 改完保存,右键 Laragon 托盘 → Reload Apache(不是 Restart)
确保 mod_rewrite 已启用且 .htaccess 生效
Laravel 依赖 Apache 的重写模块来把所有请求(包括静态资源路径)转发给 public/index.php 统一调度。若未启用,/css/app.css 就会被当作真实文件查找,而 public/css/ 下又没有该路径(实际在 public/build/css/ 或经 Mix 处理后位置不同),结果就是 404。
- 点击 Laragon 托盘 → Settings → Apache → 勾选 Enable mod_rewrite
- 确认
public/.htaccess文件存在且内容完整(含标准 Laravel 重写规则) - 如果用了自定义域名,还要检查对应
.conf中是否包含:AllowOverride All(在<Directory ".../public">块内)
验证 public 下关键文件与链接是否就位
即使根目录设对了,若构建产物或软链缺失,仍会返回 404。
- 运行
npm run production(非dev),确保生成public/mix.manifest.json和压缩后的js/、css/文件 - 执行
php artisan storage:link,在public/storage创建指向storage/app/public的软链(如用到用户上传资源) - 手动访问
http://myapp.test/css/app.css,看是否能直接下载文件;若 404,说明路径或构建有问题;若 200 但内容为空,可能是缓存或 MIME 类型问题
APP_URL 不要设成 API 域名
如果项目是前后端分离的 API 服务,但 .env 中 APP_URL=https://api.myapp.test,那么 asset('css/app.css') 就会输出 https://api.myapp.test/css/app.css——而这个域名根本没托管前端文件。
- 前端和 API 应该部署在不同域名:前端用
https://myapp.test,API 用https://api.myapp.test -
.env中设APP_URL=https://myapp.test(即前端域名) - 纯 API 项目建议完全不用
asset(),HTML 渲染应由前端框架负责


















