Apache Rewrite для изменения пути URI

Я новичок в Apache и у меня проблемы с пониманием правил перезаписи.

На моем тестовом сервере у меня есть произвольная конфигурация Apache, которая обслуживает экземпляр Elasticsearch для выбора IP-адресов.

На данный момент у меня есть:

<VirtualHost *:80>
ServerName home.mytest.server

ProxyPass /esearch http://127.0.0.1:9200
ProxyPassReverse /esearch http://127.0.0.1.9200

<Location /esearch>
    order deny,allow
    deny from all
    allow from <my IP>
</Location>

<Location /esearch/*/_search>
    #Alter URI in here
    order deny,allow
    deny from all
    allow from <my IP>
</Location>

</VirtualHost>

Я хочу переписать все запросы в / esearch / * / _ search , чтобы включить значение по умолчанию в путь. Итак, / esearch / * / _ search переписывается в / esearch / myIndex / * / _ search .

Как мне это сделать? Я читал об условиях и правилах перезаписи, но на самом деле это не так.

1
задан 8 September 2017 в 17:55
1 ответ

Попробуйте вместо директивы ProxyPass что-то вроде следующего:

RewriteEngine On
RewriteRule ^/esearch/([^/]+)/(_search.*) http://127.0.0.1:9200/myIndex/$1/$2 [P]
RewriteRule ^/esearch/?(.*) http://127.0.0.1:9200/$1 [P]

Здесь используется комбинация mod_rewrite с флагом mod_proxy ( P ) для перезаписи / прокси-запроса.

Вам нужен только ваш первый контейнер.

Итак / esearch / * / _ search переписывается в / esearch / myIndex / * / _ search

Однако, согласно вашей более ранней директиве ProxyPass ,это проксируется в / myIndex / * / _ search . Именно это и пытается сделать директива mod_rewrite.

1
ответ дан 3 December 2019 в 23:26

Теги

Похожие вопросы