mod_rewrite在XAMPP下不生效主因是模块未加载、AllowOverride未设为All或.htaccess未被读取;需检查LoadModule rewrite_module是否启用、<Directory>中AllowOverride All是否配置、.htaccess文件名及RewriteEngine On是否正确。

mod_rewrite 在 XAMPP 下不被识别,基本就是模块没加载、配置没放开、或规则根本没进解析流程——跟规则写得对不对关系不大。
确认 mod_rewrite 模块是否真实加载
很多人在 XAMPP 控制面板里看到「rewrite_module」已勾选,就以为万事大吉。其实那只是界面状态,Apache 进程未必真加载了它。
打开终端(Windows 下用命令提示符或 PowerShell),执行:
httpd -M | findstr rewrite
如果没输出任何内容,说明模块压根没加载。这时要手动检查 xampp\apache\conf\httpd.conf 文件:
- 搜索
LoadModule rewrite_module,确保该行未被注释(即前面没有#) - 确认路径正确,典型为:
LoadModule rewrite_module modules/mod_rewrite.so - 保存后必须重启 Apache(XAMPP 控制面板点「Stop」再「Start」,不能只点「Restart」)
AllowOverride 设置为 All 才允许 .htaccess 生效
XAMPP 默认的 httpd.conf 中,<Directory ""${INSTALL_DIR}/htdocs""> 块内通常写着 AllowOverride None。这意味着无论你放多少个 .htaccess,Apache 都会直接跳过。
改成:
AllowOverride All
注意:只改这一处还不够。如果你把网站放在子目录(比如 htdocs/myapp),而 .htaccess 放在 myapp 里,就得确保这个子目录也被 <Directory> 覆盖到——或者更简单,直接把 .htaccess 放到 htdocs 根下测试。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
改完务必重启 Apache,仅重载配置(reload)在 XAMPP 中常无效。
验证 .htaccess 文件本身是否被读取
即使模块开了、AllowOverride All 也设了,.htaccess 还是可能被忽略。常见原因包括:
- 文件名错误:
htaccess、.HTACCESS、.htaccess.txt都不行,必须是严格的小写.htaccess - Windows 下无法直接创建以点开头的文件:用记事本另存为时,“文件名”栏填
".htaccess"(带英文双引号),或用 VS Code / Notepad++ 等编辑器直接新建 - 文件里缺了开关:
RewriteEngine On必须是第一行有效指令,否则所有RewriteRule都静默失效 - 权限问题:XAMPP for Windows 一般不校验文件权限,但若你在 WSL 或手动编译过 Apache,
chmod 644 .htaccess更稳妥
调试时启用重写日志(仅限 Apache 2.2)
Apache 2.4+ 已彻底移除 RewriteLog 和 RewriteLogLevel,但 XAMPP 默认仍带 Apache 2.2(尤其旧版)。如果你用的是 2.2 版本,可在 httpd.conf 末尾加:
RewriteLog "logs/rewrite.log"<br>RewriteLogLevel 3
然后访问页面,看 xampp\apache\logs\rewrite.log 是否有记录。但要注意:RewriteLogLevel 3 会产生大量日志,调试完务必关掉(设为 0 或删掉这两行),否则磁盘很快被撑爆。
Apache 2.4 用户只能靠 ErrorLog 配合 LogLevel alert rewrite:trace3,且需确保 error.log 路径可写、日志级别足够细——这点在 XAMPP 默认配置里常被忽略。
最易被跳过的其实是 RewriteEngine On 这一行,它不像语法错误会报错,而是让整份规则彻底“失声”。调试前先塞一条最简规则:RewriteRule ^test$ /index.php [L],再访问 /test,能跳转就说明链路通了。

















