apache пренаписване с proxypass

Опитвам се да комбинирам пренаписване и прокси пропуск и имам проблеми с пренаписването. Ето какво имам

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.world.net
RewriteRule %{HTTP_HOST} http://newexample.newworld.net:7802/apex/f?p=208 [R,P]
ProxyPass / http://newexample.newworld.net:7802/

Проксипасът работи, но не мога да разбера как да получа първоначалното пренасочване. Така че, ако потребителят постави example.world.net/apex/f?p=208, той отива на newexample.newworld.net:7802/apex/f?p=208 и маскира URL адреса.

Трябва обаче да накарам example.world.net да пренасочи към example.world.net/apex/f?p=208, ако apex/f?p=208 не е в URL адреса.


person user1733616    schedule 16.10.2012    source източник


Отговори (2)


Не можете да пренасочвате и прокси едновременно. Вашите флагове за правило за пренаписване са [R,P], което е „пренасочване“ и „прокси“. Тук ще имате нужда от едното или от другото. Освен това регулярният израз на вашето правило никога няма да съвпадне с %{HTTP_HOST}, освен ако URL адресът ви не е буквално: http://example.world.net/%{HTTP_HOST}. Ще трябва да го промените на:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.world.net
RewriteCond %{QUERY_STRING} !(^|&)p=208(&|$)
RewriteRule ^/?$ /apex/f?p=208 [L,QSA,R]

Това ще пренасочи браузъра, ако URL адресната лента казва http://example.world.net/ до http://example.world.net/apex/f?p=208. След това от проксито зависи да вземе /apex/f?p=208 и да го прокси на http://newexample.newworld.net:7802/.

Има възможност mod_proxy и mod_rewrite да не играят добре заедно, защото и двата могат в крайна сметка да бъдат приложени към един и същ URL адрес. Ако установите, че и двете се прилагат едновременно, променете реда ProxyPass на:

RewriteRule ^/?(.*)% http://newexample.newworld.net:7802/$1 [L,P,QSA]
person Jon Lin    schedule 16.10.2012
comment
Това работи чудесно. Не трябваше да добавям последното пренаписване, което споменахте. Работеше с проксипаса. Благодаря ти - person user1733616; 16.10.2012

Така че искате example.world.net да пренасочи към http://newexample.newworld.net:7802/apex/f?p=208 или към example .world.net/apex/f?p=208 ? Предполагам първото, ако греша, променете url в RewriteRule на второто.

но мисля, че това трябва да го направи

RewriteCond %{HTTP_HOST} ^example.world.net$ [NC]
RewriteRule %{HTTP_HOST} http://newexample.newworld.net:7802/apex/f?p=208 [R,L]

но тогава не е известно какво е името/псевдонимите на вашия виртуален хост, така че / in

ProxyPass / http://newexample.newworld.net:7802/

може да счупи всичко.

person iddqd    schedule 16.10.2012
comment
Съжаляваме, че не работи example.world.net не се пренасочва към example.world.net. Той оставаше същият и в задния край отиваше към newexample.newworld.net:7802. - person user1733616; 16.10.2012