提问人:Andy Knipp 提问时间:11/18/2023 最后编辑:MrWhiteAndy Knipp 更新时间:11/18/2023 访问量:17
基于 URL 参数请求的 Apache 代理
Apache Proxy requested based on URL parameter
问:
将 Apache 重新映射到 TC 后端,但除非设置了某个参数,否则我想过滤掉。
即。 映射到http://server/myapp?project=mine
http:server:8080/myapp?project=mine
将会有更多的参数(尽管我将强制执行最后一个参数)。project=mine
ProxyPassMatch
有效,但不适用于参数。
我试过了
RewriteCond %{QUERY_STRING} project=mine
RewriteRule (.*) localhost:8080
似乎很接近,但在 CURL 中测试我得到:此文档已移动......
我没有得到或ProxyPass
ProxyPassMatch
我错过了什么?
提示/指针/RTFM 表示赞赏
答:
0赞
MrWhite
11/18/2023
#1
您需要使用 上的标志将请求传递到 mod_proxy,而不是被视为外部 3xx 重定向(即。“此文档已移动”消息)。P
RewriteRule
例如,如果直接在容器中使用:<VirtualHost>
RewriteCond %{QUERY_STRING} (^|&)project=mine$
RewriteRule ^/myapp$ http://server:8080$0 [P]
该条件检查查询字符串末尾的 URL 参数。仅匹配 URL 路径(如示例所示)。project=mine
/myapp
反向引用包含与模式匹配的整个 URL 路径。这仅节省了替换字符串中的重复。$0
RewriteRule
/myapp
RewriteCond %{QUERY_STRING} project=mine RewriteRule (.*) localhost:8080
初次尝试存在一些问题(除了缺少标志):P
- 您正在匹配任何 URL 路径,例如。 也会被抓住。但这也被丢弃了。
/anotherapp
- 正则表达式与查询字符串中的任意位置匹配该字符串,即使作为其他 URL 参数的一部分也是如此。例如。 也会匹配。
project=mine
fooproject=miner
localhost:8080
不是有效的替换字符串。
评论
0赞
Andy Knipp
11/18/2023
谢谢。我确实意识到我正在放弃我的应用程序,并且绝对不希望这样。我认为这已经向我展示了足以完成我的任务。
评论