Apache mod_rewrite / mod_proxy - переписать последнюю часть URI как строку запроса? - PullRequest
2 голосов
/ 28 июня 2011

У нас есть веб-ресурс, доступ к которому можно получить по URL / URL-адресу в форме:

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

Однако мы работаем с внешним (т.е. не разработанныммы, поэтому не под нашим контролем, т.е. мы не можем его изменить) клиентское приложение, которое пытается получить доступ к нашему ресурсу с помощью 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 достиг бы этого?

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>

Спасибо, Джим

...