如何解决ProxyPassMatch中无法识别LocationMatch中的命名组反向引用
我的英语很差,这是我的第一个问题,所以希望我做得对;-)
我使用Apache HTTPD 2.4.41(Win64),并且想使用以下LocationMatch-Rule:
<LocationMatch "^/es/(?<ind>.*)/_search$">
AllowMethods GET POST
ProxyPassMatch http://localhost:9200/%{MATCH_IND}/_search
ProxyPassReverse http://localhost:9200
</LocationMatch>
该规则似乎匹配,因为我收到了来自后端服务器(ElasticSearch)的响应。响应正文显示,命名的组反向引用无法正常工作:
GET /es/archives/_search
{
"error": "no handler found for uri [/%25%7BMATCH_IND%7D/_search/es/archives/_search] and method [POST]"
}
似乎命名的组反向引用未被识别,并且已经被直接传递给后端服务器而没有被解释。
至少已附加原始URL(如the doc中所述)。作为一种解决方法,我什至可以这样保留,但我认为这不是实现此目的的正确方法。
任何关于Apache为何无法识别命名组反向引用和变量的原因的想法吗?我的Apache版本(2.4.41)也应该很好,因为2.4.8版中已引入命名组反向引用。
我实际上在Stack Overflow和Google上花费了数小时,以寻找类似的情况,但到目前为止没有任何帮助。
希望,有人可以帮忙!
解决方法
似乎 <LocationMatch>
文档在使用带有 ProxyPass
和 ProxyPassMatch
的匹配表达式时非常模糊。 %{MATCH_*}
表达式似乎不适用于它们。然而,似乎反向引用(即$1
)确实有效。所以你可能想要这样的东西:
<LocationMatch "^/es/(?<ind>.*)/_search$">
AllowMethods GET POST
ProxyPassMatch http://localhost:9200/$1/_search
ProxyPassReverse http://localhost:9200
</LocationMatch>
注意,需要在正则表达式中使用命名组,否则不会填充反向引用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。