Apache ProxyPassRewrite не переписує органи відповідей, отримані від http://test.example.com , лише заголовки (як-от переадресації на сторінку 404 тощо).
Низка альтернатив:
Один ) Перепишіть внутрішнє додаток, щоб використовувати відносні шляхи замість абсолютних. тобто ../css/style.css
замість/css/style.css
Два ) Перевстановити внутрішню програму в той самий підкаталог, /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 in 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>