
本文详解 Laravel 项目在 Ubuntu + Apache2 环境下因 URL 重写未启用导致 CSS/JS 文件 404、页面无样式的问题,核心解决方法是启用 Apache 的 rewrite 模块并正确配置虚拟主机。
本文详解 laravel 项目在 ubuntu + apache2 环境下因 url 重写未启用导致 css/js 文件 404、页面无样式的问题,核心解决方法是启用 apache 的 `rewrite` 模块并正确配置虚拟主机。
在 Ubuntu 系统上通过 Apache2 部署 Laravel 应用(如 Nexthour CMS)时,常见现象是:首页或登录页可访问(如 http://localhost/server.php/login 或 http://localhost/public/index.php/login),但所有 CSS、JS 和图片资源返回 404 错误,页面仅显示纯文本内容。根本原因并非路径配置错误或文件缺失,而是 Apache 的 mod_rewrite 模块未启用——该模块是 Laravel 路由机制和静态资源正确解析的前提。
Laravel 的 public/ 目录是唯一应被 Web 服务器直接访问的入口。当您通过 server.php(Laravel 内置 PHP 开发服务器的兼容脚本)或 public/index.php 手动访问时,URL 中显式包含 server.php 或 index.php,会绕过 Apache 的重写规则,导致以下问题:
- 浏览器请求 /css/app.css 时,Apache 无法将该请求重写至 public/css/app.css,而是尝试在文档根目录下查找 css/ 子目录(不存在),返回 404;
- 同时,Laravel 的路由(如 /login)依赖 .htaccess 中的 RewriteRule 将请求隐式转发给 index.php 处理;若 mod_rewrite 关闭,该规则失效,导致 http://localhost/login 直接 404,而必须显式访问 http://localhost/index.php/login ——但此时静态资源仍无法加载。
✅ 正确解决方案如下:
1. 启用 Apache 的 rewrite 模块
在终端执行:
sudo a2enmod rewrite sudo systemctl restart apache2
✅ 这正是问题答案中简洁指出的关键步骤。a2enmod rewrite 会启用 mod_rewrite 并确保其在 Apache 配置中生效。
Apache Superset Dashboard and SQL Exploration Skill下载Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
2. 配置虚拟主机(推荐方式)
避免直接访问 server.php 或 public/index.php,而是将 Apache 的 DocumentRoot 指向 Laravel 的 public/ 目录,并启用 .htaccess 支持:
编辑您的站点配置(例如 /etc/apache2/sites-available/nexthour.conf):
<virtualhost>
ServerName localhost
DocumentRoot /var/www/nexthour/public
<directory>
Options Indexes FollowSymLinks
AllowOverride All # ← 关键:允许 .htaccess 覆盖重写规则
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),无需任何 index.php 或 server.php 前缀。
3. 验证与注意事项
- ✅ 检查 .htaccess 是否存在:确保 public/.htaccess 文件存在且内容为 Laravel 默认规则(含 RewriteEngine On);
- ⚠️ 不要将 server.php 作为生产入口:它是 Laravel 为 PHP 内置服务器提供的兼容层,不适用于 Apache;
- ? 若仍报 404,请检查 Apache 错误日志:sudo tail -f /var/log/apache2/error.log,确认是否出现 AH00670: The RewriteRule directive 类警告(即重写被禁用);
- ? 生产环境务必禁用 AllowOverride All(改用
内联重写规则)以提升性能,但开发阶段可保留。
遵循以上步骤后,Nexthour CMS 将完全按 Laravel 标准流程运行:所有静态资源正确加载,所有路由干净可访问,样式与交互功能恢复正常。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











