Apache mod_rewrite最常用之处是解决路径迁移、动态URL静态化、路径隔离及安全拦截等实际运维问题。它作为请求第一道分流器,通过内部重写(如[L,PT])保持旧链接可用,外部重定向(如[R=301,L])保障SEO,[QSA]保留参数,RewriteCond配合[F]或[E=skip:1]实现精准权限控制与规则避让。

Apache mod_rewrite 最常用的地方不是“把网址变漂亮”,而是解决实际运行中绕不开的路径、兼容和安全问题。它本质是请求进入 Apache 后的第一道分流器,能决定这个请求该去哪、要不要拦、要不要改头换面再交出去。
老链接还能用,但页面已挪地方
比如把 /old-page.html 改成 /new-section/intro.html,又不想让书签失效或搜索引擎掉权。这时候分两种处理:
- 用户看不到变化:用内部重写,浏览器地址栏仍显示
/old-page.html,但 Apache 实际调用新路径,规则像这样:RewriteRule ^/old-page\.html$ /new-section/intro.html [L,PT] - 用户需要知道已更新:用外部重定向,强制浏览器跳转到新地址,返回 301(永久)更利于 SEO:
RewriteRule ^/old-page\.html$ /new-section/intro.html [R=301,L]
动态脚本伪装成静态路径
PHP 页面原本带参数,比如 /article.php?id=123&type=news,对人和搜索引擎都不友好。通过重写,让它看起来像真实目录:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteRule ^article/([0-9]+)/([a-z]+)$ /article.php?id=$1&type=$2 [QSA,L]-
[QSA]很关键——它会把原 URL 中多出的参数(如?utm_source=weibo)自动追加过去,不丢数据 - 访问
/article/123/news?utm_source=weibo,后端照样收到完整参数
隔离特定路径,避免规则误伤
很多项目全局开了重写,但 API 接口或静态资源不该被干扰。Apache 没有 [END](那是 Nginx 的),真正靠谱的做法是:
- 提前打标:在所有通用规则前加一条守门规则
RewriteCond %{REQUEST_URI} ^/api/ [OR]<br>RewriteCond %{REQUEST_URI} ^/static/<br>RewriteRule ^ - [E=skip:1,L] - 后续每条规则都加条件:
RewriteCond %{ENV:skip} !=1<br>RewriteRule ... - 或者更干净:在
<Location "/api/">块里单独配,不继承外层规则,RewriteEngine Off直接关掉静态目录的重写
代理前统一做权限或路径检查
不是所有拦截都要后端扛。Apache 可以在反向代理前就卡住非法请求:
- 封禁恶意 Host:
RewriteCond %{HTTP_HOST} ^(bad-domain\.com|scam\.org) [NC]<br>RewriteRule ^ - [F] - 保护敏感路径:
RewriteCond %{REQUEST_URI} ^/admin/(config|debug|dump) [NC]<br>RewriteRule ^ - [F] - 配合
mod_proxy,把鉴权逻辑交给独立服务,Apache 只负责转发和响应判断

















