apache虚拟主机rewrite规则必须为每个站点单独配置,不能继承;需启用mod_rewrite模块,在directory块内设置options +followsymlinks、allowoverride none/all,并写rewriteengine on及^article/格式路径规则,加[l]等标志确保执行。

Apache mod_rewrite 在虚拟主机中不能“一配全通”,必须为每个站点单独配置,否则规则不生效或相互干扰。
确保 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前的#
在 VirtualHost 的 Directory 块内启用并写规则
不能只在 <virtualhost></virtualhost> 根层级写 RewriteEngine On,必须包裹在 <directory></directory> 中,并配齐权限与选项:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
Options +FollowSymLinks:多数规则依赖此项,缺失会导致 500 错误 -
AllowOverride None(直接写规则时)或All(配合 .htaccess 时) -
RewriteEngine On必须紧贴规则前,且每台虚拟主机都要单独写
路径匹配和规则书写要点
常见错误多源于路径写法和标志遗漏:
- 匹配路径用
^article/(开头无斜杠),不是^/article/ - 每条
RewriteRule后建议加[L],防止后续规则误触发 - 需跳转到 HTTPS 或外部域名时,加
[R=301,L];需保留原查询参数,加[QSA] - 排除真实文件/目录:加上
RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d
避免常见冲突
多站点共存时,细节决定稳定性:
-
RewriteCond只对紧随其后的那一条RewriteRule生效,不能跨行复用 - 不要同时在
<directory></directory>和同目录下的.htaccess写规则,易重复执行或优先级混乱 - 不同虚拟主机的规则互不影响,但若共用同一 DocumentRoot 且未隔离
<directory></directory>范围,可能意外覆盖










