Apache ProxyPassRewrite не переписывает тела ответов, полученные с http://test.example.com , а только заголовки (например, перенаправления на страницу 404 и т. Д.).
Ряд альтернатив:
Один ) Перепишите внутреннее приложение, чтобы использовать относительные пути вместо абсолютных. т.е. ../css/style.css
вместо/css/style.css
2 ) /folder
Повторно разверните внутреннее приложение в том же подкаталоге, а не в корне test.example.com.
Три ) Один и два часто маловероятны ... Если вам повезло, внутреннее приложение использует только два или три подкаталога, и они не используются на вашем основном сайте , просто напишите несколько строк ProxyPass:
# Expose Internal App to the internet.
ProxyPass /externalpath/ http://test.example.com/
ProxyPassReverse /externalpath/ http://test.example.com/
# Internal app uses a bunch of absolute paths.
ProxyPass /css/ http://test.example.com/css/
ProxyPassReverse /css/ http://test.example.com/css/
ProxyPass /icons/ http://test.example.com/icons/
ProxyPassReverse /icons/ http://test.example.com/icons/
Четыре ) Создайте отдельный поддомен для внутреннего приложения и просто переверните все прокси:
<VirtualHost *:80>
ServerName app.example.com/
# Expose Internal App to the internet.
ProxyPass / http://test.internal.example.com/
ProxyPassReverse / http://test.internal.example.com/
</VirtualHost>
Пять ) Иногда разработчики совершенно невежественные и имеют свои приложения не только генерировать абсолютный URL, но даже включать имя хоста часть в их URL, и результирующие HTML код выглядит следующим образом : <img src=http://test.example.com/icons/logo.png>
.
A ) Вы можете использовать комбинированное решение DNS с разделением горизонта и сценария 4. Как внутренние, так и внешние пользователи используют test.example.com, но ваш внутренний DNS указывает непосредственно на ip-адрес сервера test.example.com. Для внешних пользователей общедоступная запись test.example.com указывает на IP-адрес вашего общедоступного веб-сервера www.example.com, и вы можете использовать решение 4.
B ) На самом деле вы можете заставить apache не только запрашивать прокси на test.example.com, но и переписать тело ответа, прежде чем оно будет передано вашим пользователям. (Обычно прокси переписывает только HTTP заголовки / ответы). mod_substitute в apache 2.2. Я не проверял, хорошо ли он сочетается с mod_proxy, но, возможно, работает следующее:
<Location /folder/>
ProxyPass http://test.example.com/
ProxyPassReverse http://test.example.com/
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|test.example.com/|www.example.com/folder/|i"
</Location>