
laravel 应用在 ubuntu + apache2 环境下无法加载 css/js 资源,页面纯文本显示,根本原因是 apache 的 mod_rewrite 模块未启用,导致 laravel 的重写规则失效,静态资源路径解析错误。
laravel 应用在 ubuntu + apache2 环境下无法加载 css/js 资源,页面纯文本显示,根本原因是 apache 的 mod_rewrite 模块未启用,导致 laravel 的重写规则失效,静态资源路径解析错误。
在部署基于 Laravel 的第三方 CMS(如 Nexthour)时,常见现象是:
- 通过 http://localhost/server.php 或 http://localhost/public/index.php/login 能访问路由(如登录页),但所有 CSS、JS、图片等静态资源 404;
- 浏览器开发者工具中可见资源请求路径类似 http://localhost/server.php/css/app.css —— 这明显错误:server.php 是一个 PHP 入口脚本,不是 Web 可访问的子目录,Apache 不会将其视为路径前缀来解析静态文件;
- 实际上,Laravel 要求 Web 服务器将所有请求统一指向 public/ 目录下的 index.php,并依赖 .htaccess 中的 RewriteRule 将 /css/app.css 等请求直接映射到 public/css/app.css 文件,而非交由 PHP 路由处理。
✅ 正确做法是:禁用 server.php 的临时访问方式,配置 Apache 虚拟主机直接指向 public/ 目录,并启用 mod_rewrite。
1. 启用 Apache 重写模块(关键步骤)
sudo a2enmod rewrite sudo systemctl restart apache2
✅ 这正是问题答案中提到的核心修复 —— mod_rewrite 是 Laravel 优雅 URL 和静态资源直通的前提。未启用时,.htaccess 中的重写规则完全被忽略,所有请求(包括 /css/app.css)都会被 Apache 拒绝或转发给 index.php,而 Laravel 路由器不处理静态资源,最终返回 404 或空白响应。
2. 配置 Apache 虚拟主机(推荐方式)
编辑站点配置(如 /etc/apache2/sites-available/nexthour.conf):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<virtualhost>
ServerName localhost
DocumentRoot /var/www/nexthour/public
<directory>
AllowOverride All
Require all granted
</directory>
ErrorLog ${APACHE_LOG_DIR}/nexthour_error.log
CustomLog ${APACHE_LOG_DIR}/nexthour_access.log combined
</virtualhost>
启用配置并重启:
sudo a2ensite nexthour.conf sudo systemctl reload apache2
✅ 此时访问 http://localhost/login 即可正常加载样式 —— 所有请求由 public/index.php 统一入口接管,.htaccess 中的规则生效,静态资源被 Apache 直接读取,PHP 路由仅处理动态请求。
3. 验证与注意事项
- ? 检查 .htaccess 是否存在:确保 public/.htaccess 文件存在且内容包含标准 Laravel 重写规则(官方模板);
- ? 权限检查:确保 Apache 用户(通常是 www-data)对 public/ 及其子目录有读取权限:
sudo chown -R $USER:www-data /var/www/nexthour sudo chmod -R 755 /var/www/nexthour/public
- ⚠️ 切勿通过 server.php 部署生产环境:server.php 是 Laravel 内置的简易开发服务器入口(类似 php -S),不支持重写、无性能优化、无 HTTPS 支持,仅用于本地调试;
- ? 补充说明:public/login 不存在是正常的 —— Laravel 所有路由均由 routes/web.php 定义,login 是路由名,非物理文件;静态资源(CSS/JS)必须存放于 public/ 下对应路径(如 public/css/app.css),才能被 Web 服务器直接服务。
完成以上配置后,Nexthour CMS 将正确加载全部样式与脚本,路由与资源访问均恢复正常。这是 Laravel 标准部署流程中最基础也最关键的一步。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










