Apache ProxyPass基于请求URI长度

时间:2017-02-19 16:39:30

标签: regex apache

我遇到了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}

然而似乎没有任何效果。任何有关此事的帮助将不胜感激。

1 个答案:

答案 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或更多。