Переписать 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.
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]
Итак, вы хотите, чтобы 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]
но тогда неизвестно, что такое имя / псевдонимы вашего виртуального хоста, так что / в
ProxyPass / http://newexample.newworld.net:7802/
может сломать все это.