Apache mod_rewrite / mod_proxy - 重写URI的最后一部分作为查询字符串?

时间:2011-06-28 03:13:46

标签: apache mod-rewrite mod-proxy

我们有一个可以使用以下格式的URL / URL访问的Web资源:

http://[host1]:[port1]/aaa/bbb.ccc?param1=xxx&param2=yyy...

但是,我们正在使用外部(即,不是由我们开发,因此不在我们的控制之下,即我们无法更改它)尝试使用以下URL的URL访问我们的资源的客户端应用程序:

http://[host2]/[port2]/ddd/fff/param1=xxx&param2=yyy...

换句话说,客户端包含“查询字符串”(?param1=xxx&param2=yyy...部分),就好像它是URI的一部分,而不是正确的查询字符串。

我们有一个单独的Apache代理实例,我们认为我们可以使用一些RewriteCond / RewriteRule来获取传入的请求(在“URI”末尾带有查询字符串的请求,并且没有“?”)并使用“正确的”查询字符串将URI重写为“正确的”URI,然后使用该修改/重写的URI通过代理访问我们的资源。

我们也希望在没有HTTP重定向(例如,30x)回到客户端的情况下这样做,因为看起来他们可能无法处理这样的重定向。

我一直在尝试各种各样的东西,但我不熟悉Apache mod_rewrite,所以我想知道是否有人可以告诉我(1)这是否可行以及(2)建议RewriteCond / RewriteRule将实现这一目标?

P.S。我已经取得了一些进展。以下重新正确地重写了URL,但是当我测试时,我看到302重定向到重写的URL,而不是Apache只是直接代理到重写的URL。没有重定向(302)可以做到这一点吗?

<Location /test/users/>
RewriteEngine           on
RewriteCond             %{REQUEST_URI} ^/(.*)/param1=
RewriteRule             ^/(.*)/param1=(.*) http://192.168.0.xxx:yyyy/aaa/bbbbb.ccc?base=param1=$2
</Location>

谢谢,吉姆

0 个答案:

没有答案