我遇到了Apache ProxyPass(更具体地说是ProxyPassMatch)的问题,我试图将https://domain.com/ {6个字符键}代理到另一个服务器。
我尝试过正则表达式,如下所示(尝试考虑Apache可能采用的多种方式):
ProxyPassMatch "/^.{22,22}$/g" https://domain.com/api/{6 character key}
ProxyPassMatch "/^.{7,7}$/g" https://domain.com/api/{6 character key}
ProxyPassMatch "/^.{14,14}$/g" https://domain.com/api/{6 character key}
ProxyPassMatch "/^.{23,23}$/g" https://domain.com/api/{6 character key}
ProxyPassMatch "/^.{21,21}$/g" https://domain.com/api/{6 character key}
ProxyPassMatch "/^.{8,8}$/g" https://domain.com/api/{6 character key}
ProxyPassMatch "/^.{6,6}$/g" https://domain.com/api/{6 character key}
ProxyPassMatch "/^.{15,15}$/g" https://domain.com/api/{6 character key}
ProxyPassMatch "/^.{13,13}$/g" https://domain.com/api/{6 character key}
然而似乎没有任何效果。任何有关此事的帮助将不胜感激。
答案 0 :(得分:0)
您需要捕获模式中的字符,然后在网址中引用它们:
文档示例:
ProxyPassMatch "^/(.*\.gif)$" "http://backend.example.com/$1"
https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypassmatch
所以在你的情况下,我认为你想要的是:
ProxyPassMatch "/^(.{6})$/" "https://domain.com/api/$1"
使用正则表达式时,您可以使用括号捕获匹配的文本,然后使用$ 1表示第一组括号,$ 2表示第二组等。
e.g。
ProxyPassMatch "/^(.{6})/(.{6})$/" "https://domain.com/api/$2/$1"
匹配http://domain.com/123456/ABCDEF
和代理https://domain.com/api/ABCDEF/123456
另请注意,您不需要{6,6}
,只需使用{6}
表示您需要将该字符完全匹配6次,您可以使用此格式,例如您需要可变数量的字符,例如{4,6}
介于4和6之间 - 您还可以指定{4,}
为4或更多。