обратная ссылка именованной группы в LocationMatch не распознается в ProxyPassMatch

мой английский довольно плохой, и это мой первый вопрос, так что, надеюсь, я правильно ответил ;-)

Я использую Apache HTTPD 2.4.41 (Win64) и хочу использовать следующее правило LocationMatch:

<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 был добавлен (как указано в документе< /а>). В качестве обходного пути я мог бы даже оставить это так, но, на мой взгляд, это неправильный способ добиться этого.

Есть идеи, почему Apache не распознает как обратную ссылку именованной группы, так и переменную? Моя версия Apache (2.4.41) также должна подойти, так как обратные ссылки именованных групп были введены в версии 2.4.8.

Я буквально часами провел в Stack Overflow и Google в поисках похожей ситуации, но пока ничего не помогло.

Надеюсь, кто-то может помочь!


person michelgen    schedule 09.10.2020    source источник


Ответы (1)


Кажется, что документация <LocationMatch> очень расплывчата, когда дело доходит до использования совпадающего выражения с ProxyPass и ProxyPassMatch. Выражения %{MATCH_*} с ними не работают. Однако кажется, что обратные ссылки (например, $1) работают. Итак, вы, вероятно, хотите что-то вроде:

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

Обратите внимание, что в регулярном выражении необходимо использовать именованные группы, иначе обратная ссылка не будет заполнена.

person jerrykan    schedule 29.04.2021