基于URL参数请求Apache代理

o2rvlv0m  于 2023-11-21  发布在  Apache
关注(0)|答案(1)|浏览(128)

将Apache重新Map到TC后端,但我想过滤掉,除非设置了某个参数。
即,http://server/myapp?project=mineMap到http:server:8080/myapp?project=mine
将有更多的参数(尽管我将强制project=mine作为最后一个)。
ProxyPassMatch可以工作,但不适用于参数。
我试

RewriteCond %{QUERY_STRING} project=mine
RewriteRule (.*) localhost:8080

字符串
似乎是关闭,但在 curl 测试我得到:此文档移动.
这是我在ProxyPassProxyPassMatch中无法获得的
我错过了什么?
提示/指针/RTFM赞赏

cwtwac6a

cwtwac6a1#

您需要使用RewriteRule上的P标志来通过mod_proxy传递请求,而不是被视为外部3xx重定向(即“此文档已移动”消息)。
例如,如果直接在<VirtualHost>容器中使用:

RewriteCond %{QUERY_STRING} (^|&)project=mine$
RewriteRule ^/myapp$ http://server:8080$0 [P]

字符串

  • condition* 检查查询字符串末尾的URL参数project=mine。只有URL路径/myapp匹配(如您的示例所示)。

$0反向引用包含RewriteRule * 模式 * 匹配的整个URL路径。这只是在 substitution 字符串中保存重复的/myapp

RewriteCond %{QUERY_STRING} project=mine
RewriteRule (.*) localhost:8080


您的初始尝试有一些问题(除了缺少P标志):

  • 你正在匹配任何URL路径,例如/anotherapp也会被捕获。但这也会被丢弃。
  • 正则表达式project=mine匹配查询字符串中的任何字符串,即使是其他URL参数的一部分。例如,fooproject=miner也会匹配。
  • localhost:8080不是有效的替换字符串。

相关问题