Laravel 5.5.33中public目录CSS调用asset函数出现404错误求助
排查Laravel 5.5.33中CSS文件404错误的步骤
我来帮你一步步排查这个问题,Laravel里静态资源加载的坑我也踩过不少,咱们从基础到进阶逐个验证:
1. 先确认Blade模板的调用写法是否正确
首先你得确保在Blade里调用CSS的代码是规范的,正确的写法应该是:
<link rel="stylesheet" href="{{ asset('css/style.css') }}">
- 注意
asset()的参数是相对于public目录的路径,不用加/public/前缀; - 检查拼写:比如
css是不是小写、style.css文件名有没有打错,大小写在Linux服务器上是敏感的哦; - 如果你之前用的是
url()函数,要注意它会基于APP_URL生成完整路径,可能会多出来不必要的层级,优先用asset()更稳妥。
2. 检查文件权限
Web服务器(Apache/Nginx)必须能读取你的CSS文件和文件夹,这是很容易忽略的点:
- 给文件夹和文件设置合适的权限:
chmod -R 755 public/css chmod 644 public/css/style.css - 如果是Linux服务器,还要确认文件所有者和Web服务器运行用户一致(比如
www-data):chown -R www-data:www-data public/css
3. 验证Laravel配置
- 打开根目录的
.env文件,确认APP_URL设置正确:比如本地开发的话应该是APP_URL=http://localhost/your-project,线上环境要填你的真实域名。asset()生成的路径完全依赖这个配置,要是填错了,生成的URL自然找不到资源; - 如果修改了
.env,记得清除配置缓存:php artisan config:clear - 也可以检查
config/app.php里的'url'配置项,确保和.env的APP_URL一致。
4. 检查Web服务器配置
Apache环境
要确保public目录下存在默认的.htaccess文件,Laravel官方的配置应该是这样的:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
如果这个文件丢失或被修改,Apache可能会把静态资源请求当成路由,返回404。另外要确保mod_rewrite模块已经开启。
Nginx环境
配置文件里必须包含正确的try_files规则,让Nginx优先尝试访问静态文件:
location / { try_files $uri $uri/ /index.php?$query_string; }
配置修改后记得重启Nginx生效。
5. 清除缓存
- 浏览器缓存:按
Ctrl+Shift+R强制刷新页面,避免浏览器加载旧的错误链接; - Laravel缓存:执行以下命令清除视图和缓存文件:
php artisan cache:clear php artisan view:clear
6. 直接测试资源URL
打开浏览器开发者工具(F12),切换到Network标签,找到CSS文件的请求URL,复制后直接在地址栏访问:
- 如果直接访问还是404:说明文件确实不存在、路径错误或权限有问题;
- 如果能正常访问:那大概率是模板调用错误或缓存未清除导致的。
内容的提问来源于stack exchange,提问作者Álvaro
相关产品推荐
相关产品推荐

