O Apache ProxyPassRewrite não reescreve os corpos de resposta recebidos de http://test.example.com , apenas cabeçalhos (como redirecionamentos para uma página 404 e outras).
Várias alternativas:
Um ) Reescreva o aplicativo interno para usar caminhos relativos em vez de absolutos. ou seja, em ../css/style.css
vez de/css/style.css
Dois ) Reimplemente o aplicativo interno no mesmo subdiretório, /folder
e não na raiz de test.example.com.
Três ) É improvável que um e dois aconteçam ... Se você tiver sorte, o aplicativo interno usa apenas dois ou três subdiretórios e esses não são utilizados no site principal , basta escrever várias linhas de 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/
Quatro ) Crie um subdomínio separado para o aplicativo interno e simplesmente inverta o proxy:
<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>
Cinco ) Às vezes, os desenvolvedores são completamente à nora e têm as suas aplicações não só gerar absoluta URL de mas mesmo incluir a parte hostname em sua URL do e as resultantes olhares de código HTML como este: <img src=http://test.example.com/icons/logo.png>
.
A ) Você pode usar a solução combinada de um DNS com horizonte dividido e o cenário 4. Os usuários internos e externos usam o test.example.com, mas o DNS interno aponta diretamente para o endereço IP do servidor test.example.com. Para usuários externos, o registro público de test.example.com aponta para o endereço IP do seu servidor público em www.example.com e você pode usar a solução 4.
B ) Na verdade, você pode obter do apache não apenas solicitações de proxy para test.example.com, mas também reescrever o corpo da resposta antes que ele seja transmitido aos seus usuários. (Normalmente, um proxy apenas reescreve os cabeçalhos / respostas HTTP). mod_substitute no apache 2.2. Não testei se ele se comporta bem com mod_proxy, mas talvez o seguinte funcione:
<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>