Apache Reescreve para alterar o caminho do URI

1

Sou novo no Apache e estou com problemas para entender as regras de reescrever.

No meu servidor de teste, eu tenho uma configuração arbitrária do Apache que serve uma instância do Elasticsearch para selecionar IPs.

O que eu tenho até agora é:

<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>

O que eu quero fazer é reescrever todas as solicitações para /esearch/*/_search para incluir um valor padrão no caminho. Então /esearch/*/_search é reescrito para /esearch/myIndex/*/_search .

Como faço isso? Eu li sobre o RewriteConditions e Rules, mas ele não está realmente afundando.

    
por Donglecow 08.09.2017 / 16:35

1 resposta

1

Tente algo como o seguinte, em vez da diretiva 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]

Isso usa mod_rewrite em combinação com mod_proxy ( P flag) para reescrever / proxy o pedido.

Você só precisa do seu primeiro container <location /esearch> .

So /esearch/*/_search is rewritten to /esearch/myIndex/*/_search

No entanto, de acordo com sua diretiva ProxyPass anterior, isso é proxied para /myIndex/*/_search . Que é o que a diretiva mod_rewrite tenta fazer.

    
por 09.09.2017 / 00:38