apache mod_rewrite失效主因是模块未启用、allowoverride未设为all或rewriteengine未首行开启;须终端验证rewrite_module加载、检查虚拟主机directory配置中allowoverride all与options followsymlinks,并确保rewriteengine on位于.htaccess首行。

Apache mod_rewrite 常见问题不是靠“看文档”就能解决的,关键在排查路径是否走通——90% 的失效问题根本没到规则执行那一步,卡在模块、权限或基础配置上。
确认 mod_rewrite 模块真实启用
宝塔面板或命令行勾选“启用”不等于生效。必须终端验证:
- 执行 httpd -M | grep rewrite(CentOS/RHEL)或 apache2ctl -M | grep rewrite(Debian/Ubuntu)
- 输出含 rewrite_module (shared) 才算成功
- 若无输出,检查
/etc/httpd/conf/httpd.conf或/etc/apache2/mods-enabled/rewrite.load中LoadModule rewrite_module是否取消注释 - 改完必须 重载或重启 Apache,仅“重启”有时不触发模块加载
检查 .htaccess 是否被 Apache 允许读取
即使规则写对,.htaccess 被忽略就等于没写。重点查虚拟主机配置文件(如 /www/server/panel/vhost/apache/your-site.conf)中对应目录的 <directory></directory> 块:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 必须有 AllowOverride All(不能是 None 或 FileInfo)
- 建议同时包含 Options FollowSymLinks(旧版 Apache 必需)
- 宝塔新建站点默认是
AllowOverride None,常被忽略 - 改完配置后务必重载 Apache,不是只改
.htaccess
验证 RewriteEngine 是否开启且位置正确
RewriteEngine On 是开关,不是可选装饰:
- 必须是
.htaccess文件中的第一行有效指令 - 它只对当前作用域生效(不能跨目录继承)
- 如果用了
RewriteBase,确保路径匹配实际部署位置(例如子目录站点要写RewriteBase /subdir/) - 没有这行,所有
RewriteRule和RewriteCond都静默跳过
区分内部重写与外部重定向
行为不符往往源于标志误用:
- [L] 表示“最后一条”,避免后续规则干扰,多数情况应加上
- [R] 触发浏览器跳转(HTTP 302),地址栏会变;没它就是内部重写,URL 不变
- [PT](PassThrough)用于配合其他处理器(如 CGI、PHP-FPM),避免重写被二次处理
- [QSA](QueryString Append)保留原查询参数,否则会被丢弃
不复杂但容易忽略










