Переписать 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/

может сломать все это.

Другие вопросы по тегам