Я новичок в 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
.
Как мне это сделать? Я читал об условиях и правилах перезаписи, но на самом деле это не так.
Попробуйте вместо директивы 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.