Apache虚拟主机中配置mod_rewrite需确保四环节到位:模块启用、权限放开、作用域明确、规则写法正确;缺一即静默失效,如Ubuntu用a2enmod rewrite,Directory块内配Options+FollowSymLinks、AllowOverride及RewriteEngine On,路径正则不带开头斜杠,规则末加[L]等。
apache 虚拟主机中配置 mod_rewrite 规则,关键不是“加几行代码”,而是确保四个环节全部到位:模块启用、权限放开、作用域明确、规则写法正确。漏掉任一环,规则都静默失效。
确认 mod_rewrite 模块已启用
这是所有重写的前提。不同系统启用方式略有差异:
-
Ubuntu/Debian:运行
sudo a2enmod rewrite,再执行sudo systemctl restart apache2 -
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> 根层级写 RewriteEngine On,必须包裹在 <Directory> 块中,并配齐必要选项:
-
Options +FollowSymLinks:多数规则依赖此项,否则返回 500 错误 -
AllowOverride None(若直接写规则)或AllowOverride All(若需支持 .htaccess) -
RewriteEngine On必须出现在每条规则前,且每个虚拟主机都要单独写
路径匹配写法要准确
正则中的路径不带开头斜杠:^article/ ✅,不是 ^/article/ ❌。末尾建议加上 [L] 标志,防止后续规则被意外触发。例如:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteRule ^article/([0-9]+)/?$ /article.php?id=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ /index.php [L]
避免常见干扰和冲突
-
RewriteCond只对紧随其后的那一条RewriteRule生效,不能跨行复用 - 不要同时在
<Directory>和同目录下的.htaccess中写规则,易导致重复执行或优先级混乱 - 如需保留原始查询参数(如
?ref=utm),加上[QSA];如需外部跳转,用[R=301,L]

















