mod_proxy本身不处理伪静态,真正实现依赖mod_rewrite提取语义并拼接完整uri后加[p]交由mod_proxy代理;proxypass仅支持静态前缀转发,无法解析url参数或捕获变量。

不能靠 mod_proxy 单独实现伪静态,它只负责转发,不解析 URL 结构;真正起作用的是 mod_rewrite 提取语义、拼接参数,再用 [P] 标志交由 mod_proxy 代理出去。
为什么 ProxyPass 不够用
ProxyPass 是路径前缀匹配,比如 ProxyPass /api/ http://backend:8080/api/。它不看 URL 里的数字、字母或问号后的内容,也没法把 /article-123.html 拆出 123 去拼成 /article.php?id=123。
- 不支持正则捕获变量(如 ID、slug、日期)
- 不能重写 query string,也不能动态构造带参数的后端地址
- 所有映射都是静态字符串,无法适配语义化路径
核心组合:RewriteRule + [P]
必须用 RewriteRule 解析请求路径,生成完整后端 URI,再加 [P] 让 Apache 当作代理发出,而不是跳转或内部重定向。
- [P] 要求 mod_proxy 和对应子模块(如 mod_proxy_http)已启用
- 重写目标必须是完整 URI,例如
http://localhost:8080/post.jsp?id=456,不能写相对路径 - 务必加 [L] 防止后续规则干扰,避免循环或误转发
典型配置示例
假设用户访问 /news/2026/04/15/my-post.html,需转发到 Tomcat 的 http://localhost:8080/article.jsp?year=2026&month=04&day=15&slug=my-post:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
RewriteEngine On
RewriteRule ^/news/([0-9]{4})/([0-9]{2})/([0-9]{2})/([a-z0-9\-]+)\.html$ \
http://localhost:8080/article.jsp?year=$1&month=$2&day=$3&slug=$4 [P,L]
注意:若后端是 Tomcat 且走 AJP 协议,目标可写为 ajp://localhost:8009/article.jsp?...,但需加载 mod_proxy_ajp。
前置必要条件
确保以下模块在 httpd.conf 中已启用(去掉 #):
LoadModule rewrite_module modules/mod_rewrite.soLoadModule proxy_module modules/mod_proxy.so-
LoadModule proxy_http_module modules/mod_proxy_http.so(HTTP 后端用) -
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so(AJP 后端用)
虚拟主机中还需设置 AllowOverride All(若用 .htaccess),或直接在 <virtualhost></virtualhost> 内写规则。










