Назад | Перейти на главную страницу

Вложенные виртуальные хосты Apache

У меня есть два виртуальных хоста на сервере 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, который выполняет проксирование.