apache rewriterule伪静态重写核心是“匹配前端url→映射到真实脚本+参数”,需正则准确、标志合理(如[l,qsa,nc])、避免循环或404;一条规则含触发路径、目标路径(绝对路径)、标志三部分,并须启用mod_rewrite、allowoverride all及rewriteengine on。

Apache 中 RewriteRule 编写基础伪静态重写规则,核心是把用户看到的“友好 URL”准确映射到服务器真实执行的脚本路径和参数,不改变浏览器地址栏,也不依赖跳转。
明确三要素:触发路径、目标路径、标志
每条 RewriteRule 必须包含这三项,缺一不可:
-
触发路径:用正则表达式描述用户输入的 URL,如
^/news/([0-9]+)/?$(匹配/news/123或/news/123/) -
目标路径:必须是绝对路径(以
/开头),例如/news.php?id=$1;写成news.php?id=$1是相对路径,容易出错 -
标志(Flags):至少带
[L](Last),表示匹配后停止后续规则;常用组合还有[QSA,L](保留原始查询参数)、[NC,L](忽略大小写)
几个高频场景直接套用
以下规则可复制使用,只需按实际文件名和目录调整:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 把
/product/1001映射为/product.php?id=1001:RewriteRule ^product/([0-9]+)$ /product.php?id=$1 [L,QSA,NC] - 把
/article/iphone-15-pro/2026映射为/article.php?model=iphone-15-pro&year=2026:RewriteRule ^article/([^/]+)/([0-9]{4})$ /article.php?model=$1&year=$2 [L,QSA]([^/]+表示不含斜杠的任意字符) - 把
/blog/php/apache-tips.html映射为/blog.php?cat=php&id=apache-tips:RewriteRule ^blog/([a-z]+)/([a-z\-]+)\.html$ /blog.php?cat=$1&id=$2 [L,NC](点号.要转义为\.)
必须检查的配置前提
规则写对但不生效?大概率卡在这几步:
- 确认
mod_rewrite已启用:httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so这行不能被注释 - 确保目录允许 .htaccess 生效:对应
<directory></directory>块中设为AllowOverride All(不是None) - .htaccess 文件放在网站根目录,且文件名是
.htaccess(开头是英文点) - 所有规则必须包裹在
<ifmodule mod_rewrite.c></ifmodule>内,并以RewriteEngine On开头
容易踩坑的细节
这些小问题常导致 500 错误或无限重定向:
- 正则开头加
^、结尾加$更安全,避免意外匹配(例如^news/([0-9]+)$不会误匹配/news/123/extra) - 多个规则注意顺序:靠前的优先匹配;若某条规则不该继续往下走,记得加
[L] - 测试时清空浏览器缓存,或用隐身窗口访问,避免 301 重定向缓存干扰判断










