apache mod_rewrite 实战需确保三件事同时到位:模块启用、目录权限放开、规则语法正确;缺一不可,否则.htaccess修改无效。

Apache mod_rewrite 实战演练,核心不是写一堆规则,而是确保三件事同时到位:模块真在运行、目录权限真被放开、规则语法真写对。缺一不可,否则你改十次 .htaccess 都没反应。
第一步:确认 mod_rewrite 模块已启用并生效
光在配置里取消注释不够,得验证它确实在 Apache 进程里加载了。
- Ubuntu/Debian 系统执行:
sudo a2enmod rewrite && sudo systemctl restart apache2 - CentOS/RHEL 系统检查
/etc/httpd/conf/httpd.conf中是否启用:LoadModule rewrite_module modules/mod_rewrite.so - 无论哪种系统,都用这条命令验证:
apache2ctl -M | grep rewrite(或httpd -M | grep rewrite),看到rewrite_module (shared)才算成功
第二步:允许 .htaccess 使用重写指令
模块开了,但 Apache 默认禁止目录级重写。必须显式授权,否则 .htaccess 里的所有 RewriteRule 都会被忽略。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 找到你的虚拟主机配置文件(比如
/etc/apache2/sites-available/000-default.conf) - 在对应
<directory></directory>块内,把AllowOverride None改成AllowOverride All - 同时确保有
Require all granted(Apache 2.4+ 必需) - 改完必须重启 Apache,否则不生效
第三步:写一条能立刻验证的规则
别一上来就写复杂正则。先跑通最简路径,再叠加逻辑。记住两个硬性要求:RewriteEngine On 必须是第一行;[L] 标志通常不能少,防止后续规则干扰。
- 在网站根目录创建或编辑
.htaccess,内容如下:
RewriteEngine On
RewriteRule ^test\.html$ /index.php [L]
- 访问
https://yoursite.com/test.html,应显示 index.php 的内容,且浏览器地址栏仍是/test.html(不是跳转,说明是内部重写) - 如果返回 404,优先检查上两步是否漏做;如果跳转了,说明规则里误加了
[R]标志
第四步:进阶——实现常见需求示例
验证通之后,可按需扩展。注意区分“内部重写”(用户看不到变化)和“外部重定向”(地址栏会变)。
-
伪静态映射:把
/article/123映射到/article.php?id=123RewriteRule ^article/([0-9]+)$ /article.php?id=$1 [QSA,L] -
强制 HTTPS + 去 www(放在同一组规则里):
RewriteCond %{HTTPS} off [OR]<br>RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]<br>RewriteRule ^(.*)$ https://%1/$1 [R=301,L] -
屏蔽敏感文件直访:
RewriteRule ^(\.env|\.git|config\.php) - [F,L]










