我是Apache新手,无法理解重写规则。
在我的testing服务器上,我有一个任意的Apacheconfiguration,它提供一个Elasticsearch实例来selectIP。
我到目前为止是:
<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在path中包含默认值。 所以/esearch/*/_search被重写为/esearch/myIndex/*/_search 。
我该怎么做呢? 我已经阅读了关于RewriteConditions和Rules的内容,但是它并没有真正地陷入其中。
尝试下面的代码而不是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标志)来重写/代理请求。
你只需要你的第一个<location /esearch>容器。
所以
/esearch/*/_search被重写为/esearch/myIndex/*/_search
但是,根据您之前的ProxyPass指令,这是代理 /myIndex/*/_search 。 这是mod_rewrite指令试图做的。