已启用 mod_rewrite 模块且需验证运行中加载、allowoverride all 配置正确、.htaccess 位置权限语法无误、使用 loglevel rewrite:trace3 查看重写过程。

确认 Apache 的 mod_rewrite 模块已启用且生效
宝塔面板默认安装 Apache 时通常会启用 mod_rewrite,但部分精简版或手动编译环境可能未加载。仅在面板「软件商店→Apache→设置→模块管理」里勾选并不等于实际启用——必须检查运行中的模块列表。
- 执行
httpd -M | grep rewrite(CentOS)或apache2ctl -M | grep rewrite(Ubuntu/Debian),输出含rewrite_module (shared)才算真正加载 - 若无输出,需手动编辑 Apache 主配置(如
/www/server/apache/conf/httpd.conf),取消该行注释:LoadModule rewrite_module modules/mod_rewrite.so - 重启 Apache:
bt restart 8或通过宝塔面板操作,不要只重载配置(bt reload 8不触发模块重载)
检查站点配置是否允许 .htaccess 覆盖规则
即使 .htaccess 文件存在且语法正确,Apache 默认禁止其生效。宝塔新建站点时一般会自动配置 AllowOverride All,但迁移旧站、手动修改配置或使用多端口/子目录站点时极易遗漏。
- 进入宝塔「网站→对应站点→配置文件」,查找对应
<directory></directory>块(路径通常为/www/wwwroot/your-domain.com) - 确认其中包含:
AllowOverride All;若为None或FileInfo,则伪静态不生效 - 避免写成
AllowOverride AuthConfig等受限值——All是唯一稳妥选择 - 改完立即保存并「重载配置」(非重启),否则不生效
验证 .htaccess 文件位置、权限与语法
.htaccess 必须放在网站根目录(即 DocumentRoot 指向的路径),且不能被宝塔「防跨站攻击」功能拦截,常见失效原因比想象中更琐碎。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 文件名必须是
.htaccess(注意开头的点),不是htaccess、.htaccess.txt或大小写错误(如.HTACCESS) - 文件权限建议设为
644,755或604可能被 Apache 拒绝读取 - 宝塔开启「防跨站攻击」后,会强制限制
.htaccess仅对当前用户可读——检查站点根目录所属用户是否与运行 Apache 的用户(通常是www)一致,可用ls -l /www/wwwroot/your-domain.com查看 - 用
apachectl -t -f /www/server/apache/conf/httpd.conf验证主配置语法;用htaccess中的规则测试可先简化为单条:RewriteRule ^test$ /index.php [L],访问/test看是否跳转
排查 RewriteLog(Apache 2.4+ 已废弃,改用 error_log)
Apache 2.4 起移除了 RewriteLog 指令,但很多人仍按旧教程找日志,导致调试卡死。真实重写过程记录在 error_log 中,需主动开启详细级别。
- 在站点配置的
<virtualhost></virtualhost>或<directory></directory>块内添加:RewriteLogLevel 3和RewriteLog "/tmp/rewrite.log"—— 这在 Apache 2.4+ 会直接报错 - 正确做法:在站点配置中加入:
LogLevel alert rewrite:trace3(trace3~trace8可调,trace3足够定位匹配失败) - 重启 Apache 后,查看
/www/wwwlogs/your-domain.error.log,搜索[rewrite:关键字,能看到每一步重写判断过程 - 注意:生产环境勿长期开启
trace3,会产生大量日志影响性能
最常被忽略的是 AllowOverride 配置层级错位——比如改了全局 httpd.conf 却没改站点专属配置,或子目录 <directory></directory> 覆盖了根目录设置。调试时务必盯住「当前请求实际匹配到的 <directory></directory> 块」,而不是想当然认为根目录配置一定生效。










