我们有一个可以通过以下形式的 URL/URL 访问的 Web 资源:
http://[host1]:[port1]/aaa/bbb.ccc?param1=xxx¶m2=yyy...
但是,我们正在使用外部(即,不是由我们开发,因此不受我们控制,即我们无法更改它)客户端应用程序,它试图使用如下所示的 URL 访问我们的资源:
http://[host2]/[port2]/ddd/fff/param1=xxx¶m2=yyy...
换句话说,客户端包含“查询字符串”(?param1=xxx¶m2=yyy...
部分),就好像它是 URI 的一部分,而不是作为正确的查询字符串。
我们有一个单独的 Apache 代理实例,我们认为我们可以将它与一些 RewriteCond/RewriteRule 一起使用来接收传入的请求(在“URI”末尾带有查询字符串的请求,并且没有“?” ) 并使用“正确”查询字符串将 URI 重写为“正确”URI,然后使用该修改/重写的 URI 通过代理访问我们的资源。
我们还希望在没有 HTTP 重定向(例如 30x)返回客户端的情况下这样做,因为看起来他们可能无法处理这样的重定向。
我一直在尝试各种事情,但我对 Apache mod_rewrite 不太熟悉,所以我想知道是否有人可以告诉我(1)这是否可能,(2)建议 RewriteCond/RewriteRule 会完成这个?
PS我已经取得了一些进展。下面正确地重写了 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>
谢谢,吉姆