在httpd.conf中启用mod_rewrite需三步:加载模块(取消#loadmodule rewrite_module modules/mod_rewrite.so注释)、在或等作用域内设rewriteengine on、按上下文写规则(如^article/...),最后httpd -t验证并重启服务。

在 httpd.conf 中直接启用并使用 mod_rewrite,不需要 .htaccess,关键在于三件事:加载模块、开启重写引擎、写对规则位置和语法。
确认并加载 rewrite 模块
打开 httpd.conf(路径通常是 /etc/httpd/conf/httpd.conf 或 /usr/local/apache/conf/httpd.conf),找到这一行:
#LoadModule rewrite_module modules/mod_rewrite.so
删掉开头的 #,确保它独占一行且未被注释。如果整行不存在,就手动添加:
LoadModule rewrite_module modules/mod_rewrite.so
注意模块名必须与实际文件名严格匹配(如 mod_rewrite.so → 写 rewrite_module,不是 mod_rewrite_module)。
在合适的位置启用 RewriteEngine 并写规则
mod_rewrite 规则不能随便放,必须放在有作用域的上下文中:
- 全局生效:直接写在 httpd.conf 的主配置区(
<ifmodule rewrite_module></ifmodule>块内更稳妥) - 按站点生效:放进某个
<virtualhost></virtualhost>块里(推荐,避免冲突) - 按目录生效:放进
<directory></directory>这类块中
每个作用域内第一行必须是:
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
RewriteEngine On
然后才是具体规则,例如:
RewriteRule ^/article/(\d+)\.html$ /article.php?id=$1 [L]
注意:路径匹配不加开头斜杠(在 <virtualhost></virtualhost> 或 <directory></directory> 中写规则时,^article/... 才对;写成 ^/article/... 可能不触发)。
不需要 AllowOverride,但要检查权限上下文
因为你是直接在 httpd.conf 里写规则,所以 AllowOverride 设置完全无关——它只控制 .htaccess 是否可用。但要注意:
- 如果规则放在
<directory></directory>块中,该目录路径必须真实存在且 Apache 有读取权限 - 若用
<location></location>或<proxy></proxy>,规则行为不同,一般不用于普通 URL 重写 - 建议用
<ifmodule rewrite_module></ifmodule>包裹整段,防止模块未加载时报错
验证与重启
改完保存,执行两步验证:
- 检查语法:
httpd -t(RHEL/CentOS)或apache2ctl configtest(Debian/Ubuntu),输出 Syntax OK 才安全 - 重启服务:
sudo systemctl restart httpd或sudo systemctl restart apache2
再用 httpd -M | grep rewrite 确认模块已加载为 rewrite_module (shared)。










