微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ProxyPassMatch中无法识别LocationMatch中的命名组反向引用

如何解决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> 文档在使用带有 ProxyPassProxyPassMatch 的匹配表达式时非常模糊。 %{MATCH_*} 表达式似乎不适用于它们。然而,似乎反向引用(即$1)确实有效。所以你可能想要这样的东西:

<LocationMatch "^/es/(?<ind>.*)/_search$">
    AllowMethods GET POST       
    
    ProxyPassMatch http://localhost:9200/$1/_search
    ProxyPassReverse http://localhost:9200
</LocationMatch>

注意,需要在正则表达式中使用命名组,否则不会填充反向引用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?