laravel 中 css 文件必须放在 public/ 下或经编译输出到 public/ 才能被浏览器访问,resources/ 目录不可直接通过 http 访问;正确方式有三:① 直放 public/css/ 并用 asset();② 用 vite 编译后用 mix();③ 用 laravel mix 编译后用 asset()。

在 Laravel 项目中直接用 resources/ 前缀引用 CSS 文件会导致 404,因为浏览器请求的是 Web 服务器可访问的 URL 路径,而 resources/ 目录不在 public 文档根下,无法被 HTTP 直接访问——哪怕路径写对了,服务器也根本不会把那个文件吐出来。
为什么不能用 resources/ 开头的路径
资源文件必须放在 public/ 下或经编译后输出到 public/,才能被浏览器通过 HTTP 请求加载。Laravel 的 Web 服务器(如 Nginx/Apache 或 php artisan serve)只将 public/ 设为文档根目录,resources/ 是开发源码目录,完全隔离于 Web 访问层。
【绝对禁止】 在 Blade 中写 <link href="/resources/css/app.css" rel="stylesheet"> —— 这个路径在任何部署环境下都 100% 失效,连本地 php artisan serve 都不行。
resource_path() 返回的是服务器本地绝对文件路径(如 /var/www/project/resources/css/app.css),它只能用于 PHP 文件读写操作,不能塞进 HTML 的 href 或 src 属性里。
正确引用 CSS 的三种方式
方法一:静态文件直放 public 目录
把 CSS 文件直接丢进 public/css/style.css,然后在 Blade 中用 asset() 生成安全 URL:
<link href="%7B%7B%20asset('css/style.css')%20%7D%7D" rel="stylesheet">
这一步操作起来很简单,直接把文件拖进去就行。asset() 会自动补上前缀(比如部署在子目录时变成 /myapp/css/style.css),且适配 HTTPS 协议。
方法二:用 Vite 编译 resources/css/ 源文件
① 确保 resources/css/app.css 存在;
② 在 resources/js/app.js 中 import 它:import '../css/app.css';;
③ 运行 npm run dev 或 npm run build,Vite 将其编译并输出到 public/build/;
④ Blade 中使用 mix()(注意不是 asset()):<link href="%7B%7B%20mix('build/app.css')%20%7D%7D" rel="stylesheet">。
mix() 函数专为 Vite 输出设计,会自动注入哈希版本号并匹配 manifest.json,避免缓存问题。如果没运行过构建命令,页面会直接报 404,且无任何提示——开发时务必保持 npm run dev 进程活跃。
方法三:用 Laravel Mix(旧项目兼容)
若项目仍用 Mix(package.json 中含 laravel-mix),则:
→ 把源 CSS 放在 resources/css/app.css;
→ 修改 webpack.mix.js 添加 .postCss('resources/css/app.css', 'public/css');
→ 执行 npm run dev;
→ Blade 中用 <link href="%7B%7B%20asset('css/app.css')%20%7D%7D" rel="stylesheet">。
注意:Mix 输出路径是 public/css/,不是 public/build/,混用 mix() 会 404。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











