与查询string替代的Mod-proxy?

我目前正在尝试使用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,然后将其代理到我的目的地。 到底:

  1. 我启用了mod_rewrite和mod_ssl
  2. 我为我的虚拟主机定义添加了一个SSLProxyEngine指令:
    SSLProxyEngine开启
  3. 我打开重写,并在我的虚拟主机高清添加了一个规则。 我也打开日志进行debugging。 我了解到,我不能重写目录的请求,所以我不得不指向一个脚本。 我也必须使用QSA和P选项:
    RewriteEngine On
    RewriteRule ^ / lookup.php / lookup?key = MYKEY [QSA,P]

  4. 我build立了我的代理规则。 由于构造了查询string,因此适用简单的代理规则:
    ProxyPass /查找https://path.to.remote/search.php
    ProxyPassReverse /查找https://path.to.remote/search.php

  5. 不要忘记重新启动Apache! (我做了)

  6. 我现在连接到http://localhost/lookup.php?term=SEACRHTERM