0

我的英语很差,这是我的第一个问题,所以希望我做对了;-)

我使用 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 已被附加(如doc 中所述)。作为一种解决方法,我什至可以像这样离开它,但在我看来,这不是实现这一目标的正确方法。

关于命名组反向引用和变量似乎都未被 Apache 识别的原因的任何想法?我的 Apache 版本 (2.4.41) 也应该没问题,因为在 2.4.8 版本中引入了命名组反向引用。

我确实花了几个小时在 Stack Overflow 和 Google 上寻找类似的情况,但到目前为止没有任何帮助。

希望,有人可以帮忙!

4

1 回答 1

0

在使用匹配的表达式时,文档似乎很<LocationMatch>模糊ProxyPassand ProxyPassMatch。这些%{MATCH_*}表达式似乎不适用于它们。然而,似乎反向引用(即。$1)确实有效。所以你可能想要这样的东西:

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

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

于 2021-04-29T03:55:51.880 回答