我是 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
尝试使用如下方法代替该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 指令试图做的事情。