apache伪静态核心是用.htaccess配合mod_rewrite将/user/123映射为user.php?id=123,不跳转、不暴露真实脚本;需启用rewrite模块、allowoverride all并重启服务。

Apache 中 URL 重写把动态参数转成友好伪静态路径,核心是用 .htaccess 配合 mod_rewrite 模块做内部映射——用户看到的是干净路径(如 /article/123),服务器实际调用的仍是 article.php?id=123,全程不跳转、不暴露真实脚本。
确认基础环境已就绪
规则生效前必须满足三个条件:
- 启用
rewrite_module:Linux 下运行a2enmod rewrite,或检查httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so已取消注释 - 允许 .htaccess 覆盖:在虚拟主机或目录配置中设置
AllowOverride All(仅设FileInfo也可能够用,但All更稳妥) - 重启 Apache:执行
systemctl restart apache2或apachectl restart
写基础单参数伪静态规则
例如将 /product/456 映射到 product.php?id=456:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在网站根目录创建或编辑
.htaccess - 第一行必须是
RewriteEngine On - 添加规则:
RewriteRule ^product/([0-9]+)/?$ product.php?id=$1 [L] -
^product/([0-9]+)/?$匹配路径开头为/product/数字,结尾斜杠可选;$1是捕获的数字;[L]表示匹配后不再执行后续规则
处理多段路径与多个参数
比如把 /blog/php-tips/2026 解析为 post.php?slug=php-tips&year=2026:
- 规则写法:
RewriteRule ^blog/([a-z\-]+)/([0-9]{4})/?$ post.php?slug=$1&year=$2 [L] - 注意正则中用
[a-z\-]匹配小写字母和短横线,[0-9]{4}精确匹配四位数字 - 若需保留原始查询参数(如
/blog/php-tips/2026?ref=abc中的ref),加[QSA]标志:[L,QSA]
避免常见陷阱
很多规则失效其实卡在细节上:
-
.htaccess中的RewriteRule模式不能以/开头(如^/article/...是错的),因为它是相对于当前目录的路径,不是完整 URL - 若站点部署在子目录(如
https://site.com/blog/),需加RewriteBase /blog/,否则重写目标路径会出错 - 建议加上防循环和文件冲突判断:
RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d,确保真实存在的文件或目录不被重写










