apache mod_rewrite模块必须手动启用、授权目录权限并编写正确规则,三者缺一不可;需通过a2enmod或取消注释loadmodule启用模块,设置allowoverride all和options +followsymlinks授权,.htaccess中以rewriteengine on开头、路径匹配不加开头斜杠、规则末尾推荐加[l]标志。

Apache mod_rewrite 模块不是默认启用的,必须手动开启并正确配置权限和规则,三者缺一不可。光写 .htaccess 规则却没开模块或没放行权限,规则完全不生效。
确认并启用 mod_rewrite 模块
模块未加载,所有重写都无效。不能只看配置文件里有没有那行,要确保它真正运行。
- Linux(Debian/Ubuntu):执行 sudo a2enmod rewrite,然后 sudo systemctl restart apache2
- Linux(CentOS/RHEL):检查 /etc/httpd/conf.modules.d/00-base.conf 是否有未注释的 LoadModule rewrite_module modules/mod_rewrite.so
- Windows(WAMP/XAMPP):打开 httpd.conf,取消 #LoadModule rewrite_module modules/mod_rewrite.so 前的 # 号
允许目录级重写权限
即使模块开了,.htaccess 文件里的规则仍需 Apache 明确授权才能执行。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在主配置或虚拟主机配置中,找到对应站点的
区块 - 确保包含 AllowOverride All(若直接在配置中写规则,可设为 None)
- 同时建议加上 Options +FollowSymLinks,多数规则依赖此项,否则可能报 500 错误
编写并验证基础规则
规则本身要语法正确,且作用范围明确。常见错误是路径匹配写错、缺少 RewriteEngine On 或标志位缺失。
- 在网站根目录新建 .htaccess 文件,开头必须写 RewriteEngine On
- 匹配路径时不用开头斜杠:写 ^article/,不要写 ^/article/(.htaccess 中路径已去除了 DocumentRoot)
- 每条 RewriteRule 后建议加 [L],表示匹配后停止后续规则,避免意外覆盖
- 如需外部跳转,用 [R=301];如需内部转发(URL 不变),不加 R 标志
虚拟主机场景特别注意
每个 VirtualHost 的重写规则不继承、不共享,必须单独配置。
- 不能只在
根层级写 RewriteEngine On,必须包裹在 块内 - 规则写在
内,而非 直接子级,否则可能被忽略 - 若使用 .htaccess,仍需该目录下配置文件存在且权限放开;若直接写在配置中,.htaccess 就不再读取









