Назад | Перейти на главную страницу

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.

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

Попробуйте вместо 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 flag) для перезаписи / проксирования запроса.

Вам нужен только ваш первый <location /esearch> контейнер.

Так /esearch/*/_search переписан на /esearch/myIndex/*/_search

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