У меня есть два виртуальных хоста на сервере apache, и я хотел бы что-то сделать, но не знаю, возможно ли это.
Дело в том, что у меня разработано основное приложение и ruby, а блог находится на wordpress. Итак, сейчас у меня есть что-то вроде этого:
Я бы хотел, чтобы все запросы к www.example.com/blog обслуживались blog.example.com, но без перенаправления (т.е. я не хочу, чтобы пользователь видел изменение URL-адреса )
Пока что я пробовал сделать прокси в VirtualHost:
<Location /blog>
ProxyPassReverse http://blog.example.com
ProxyPassReverse http://blog.example.com:80
RewriteEngine On
RewriteRule blog/(.*)$ http://blog.example.com/$1 [QSA,P,L]
</Location>
И это работает, но как только я нахожусь в другом приложении, все ссылки находятся внутри blog.example.com, а не в example.com/blog.
Вы знаете обходной путь для этого?
Заранее спасибо за вашу помощь.
Для обратного прокси-сервера исправление ссылок в выводе вашего контента (как указано в другом ответе) - лучший способ, однако mod_proxy_html это еще одна возможность.
Тем не менее, если вы обслуживаете оба приложения с одного сервера Apache, зачем беспокоиться о двух виртуальных хостах? Вы должны иметь возможность обслуживать два разных языка с одного виртуального хоста, таким образом вы можете полностью пропустить шаг обратного прокси.
Ссылки обрабатываются в вашем контенте, а не Apache. ProxyPassReverse
переводит только для переадресации - все остальное на вас.
Исправьте это, используя пути, относящиеся к хосту, в вашем контенте - вместо ссылки на http://blog.example.com/dir/page.html
, ссылка на /dir/page.html
.
Если ссылки динамически генерируются WordPress, вероятно, он читает заголовок хоста; ProxyPreserveHost
было бы нормальным способом обойти это, но не будет работать с обоими vhosts, находящимися на одном слушателе - вы в конечном итоге отправите запросы обратно на vhost, который выполняет проксирование.