这是 mod_rewrite 模块根本没加载导致的,不是 .htaccess 写错了,也不是路径问题;应先运行 apache2ctl -M | grep rewrite 或 httpd -M | findstr rewrite 验证模块是否加载,若无输出则需用 a2enmod rewrite(Debian/Ubuntu)或取消 httpd.conf 中 LoadModule rewrite_module 行的注释(Windows/自编译),并确保对应 <Directory> 块中 AllowOverride All 已配置且重启 Apache。

这是 mod_rewrite 模块根本没加载导致的,不是 .htaccess 写错了,也不是路径问题。只要看到 Invalid command 'RewriteEngine',第一反应就该是检查 rewrite 模块是否启用 —— 其他排查都是绕路。
确认 Apache 是否加载了 mod_rewrite
别猜,直接查。运行命令:
apache2ctl -M | grep rewrite
或(Windows 下用 httpd.exe):
httpd -M | findstr rewrite
如果没输出,说明模块确实没加载;如果输出 rewrite_module (shared),那问题在别处(比如 AllowOverride 配置)。常见错误现象是:.htaccess 里一写 RewriteEngine On 就报 500,日志里明确提示该命令无效。
立即学习“PHP免费学习笔记(深入)”;
Ubuntu/Debian 系统:用 a2enmod 启用最稳妥
phpEnv 多基于 Debian 衍生系统(如 Ubuntu),推荐走标准包管理流程,避免手动改配置出错:
-
sudo a2enmod rewrite—— 这会自动在/etc/apache2/mods-enabled/下建软链到rewrite.load - 检查是否生成成功:
ls -l /etc/apache2/mods-enabled/rewrite.load应指向../mods-available/rewrite.load - 重启服务:
sudo systemctl restart apache2(不用/etc/init.d/apache2 restart,后者已过时)
Windows 或自编译 Apache:改 httpd.conf 才有效
phpEnv 在 Windows 上可能用的是精简版 Apache(如 WampServer、XAMPP 风格),a2enmod 不存在,必须手动编辑配置文件:
- 打开
httpd.conf(通常在Apache/conf/或 phpEnv 的 Apache 配置目录下) - 搜索
mod_rewrite.so,找到这行:#LoadModule rewrite_module modules/mod_rewrite.so - 删掉开头的
#,保存 - **关键一步**:确保对应
<Directory>块里有AllowOverride All,否则 .htaccess 仍被忽略
为什么改完还不生效?重点盯这两个地方
模块加载了,但 RewriteEngine On 还报错,大概率卡在这两个点:
-
AllowOverride None没改 —— 它在httpd.conf或虚拟主机配置里,控制是否允许 .htaccess 覆盖设置。必须改成All或至少包含FileInfo - phpEnv 的 Apache 配置可能被多层覆盖(比如主配置 + vhost + include 目录),
grep -r "AllowOverride" /path/to/phpenv/apache/conf/才能定位真正生效的位置
重写规则本身没问题,但 Apache 根本不读 .htaccess,这种静默失效最难排查。



















