Apache ProxyPassRewrite ne réécrit pas les corps de réponse reçus de la part de http://test.example.com seulement les en-têtes (comme les redirections vers une page 404 et autres).
Un certain nombre d'alternatives :
Un ) Réécriture de l'application interne pour utiliser des chemins relatifs au lieu d'absolus, c'est-à-dire ../css/style.css
代わりに /css/style.css
Deux ) Redéployez l'application interne dans le même sous-répertoire. /folder
plutôt que dans la racine de test.example.com.
Trois ) Le premier et le deuxième ont peu de chances de se produire... Si vous avez de la chance, l'application interne n'utilise que deux ou trois sous-répertoires... et ceux-ci sont inutilisés sur votre site principal il suffit d'écrire un tas de lignes 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/
Quatre ) Créez un sous-domaine distinct pour l'application interne et utilisez simplement un proxy inverse pour tout :
<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>
Cinq ) Parfois, les développeurs sont complètement désemparés et font en sorte que leurs applications ne génèrent pas seulement des URL absolus mais incluent même la partie nom d'hôte dans leurs URL et le code HTML qui en résulte ressemble à ceci : <img src=http://test.example.com/icons/logo.png>
.
A ) Vous pouvez utiliser la solution combinée d'un DNS à horizon partagé et du scénario 4. Les utilisateurs internes et externes utilisent test.example.com, mais votre DNS interne pointe directement vers l'adresse IP du serveur de test.example.com. Pour les utilisateurs externes, l'enregistrement public de test.example.com pointe vers l'adresse IP de votre serveur web public www.example.com et vous pouvez alors utiliser la solution 4.
B ) En fait, vous pouvez faire en sorte qu'apache ne se contente pas d'envoyer des requêtes par proxy à test.example.com, mais aussi à réécrire le corps de la réponse avant qu'il ne soit transmis à vos utilisateurs. (Normalement, un proxy ne fait que réécrire les en-têtes/réponses HTTP). mod_substitute dans apache 2.2. Je n'ai pas testé s'il s'intègre bien avec mod_proxy, mais peut-être que ce qui suit fonctionne :
<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>