我目前正在尝试使用mod_proxy在另一台服务器上进行search请求。 远程服务器请求的结构如下:
http://path.to.remote/search.php?key=MYKEY&term=SEARCHTERM
为了模糊我的访问密钥,我希望在我的虚拟主机定义中包含authentication。 由于键必须作为查询string值传递,所以我认为这将是简单的:
ProxyPass /lookup/t/ http://path.to.remote/search.php?key=MYKEY&term=
我的url看起来像什么地方
http://localhost/lookup/t/term=SEARCHTERM
我很快发现,ProxyPass会在目标URL上执行强制性字符转义,导致我的URL无法使用。 我发现了很多有类似问题的人,主要是以前编码过的字符,并且ProxyPass的URL编码是不可避免的。
我发现了一些build议,我应该使用mod_rewrite为我组装代理请求,但我不知道如何做到这一点。 我的虚拟主机定义中的规则看起来像这样:
RewriteEngine On RewriteCond %{REQUEST_URI} !^/lookup/t/ RewriteRule ^/lookup/t/$ http://path.to.remote/search.php?key=MYKEY&term=$1
我没有mod_rewrite很多的经验,我的正则expression式技能不是很好,所以我希望有人能够解释我将如何重写我的URL,以及如何通过mod_proxy根据需要漏斗。 我正确的想我需要使用重写来组装查询string,如下所示:
Http://localhost/lookup/t/term=SEARCHTERM Http://localhost/lookup/t/?key=MYKEY&term=SEARCHTERM
然后用mod代理去
/lookup/t/
至
http://path.to.remote/search.php
我的怀疑结果是正确的。 我不得不用mod_rewrite修改查询string,然后将其代理到我的目的地。 到底:
我打开重写,并在我的虚拟主机高清添加了一个规则。 我也打开日志进行debugging。 我了解到,我不能重写目录的请求,所以我不得不指向一个脚本。 我也必须使用QSA和P选项:
RewriteEngine On
RewriteRule ^ / lookup.php / lookup?key = MYKEY [QSA,P]
我build立了我的代理规则。 由于构造了查询string,因此适用简单的代理规则:
ProxyPass /查找https://path.to.remote/search.php
ProxyPassReverse /查找https://path.to.remote/search.php
不要忘记重新启动Apache! (我做了)
http://localhost/lookup.php?term=SEACRHTERM