Apache ProxyPassRewrite ne réécrit pas les corps de réponse reçus de http://test.example.com , uniquement les en-têtes (comme les redirections vers une page 404, etc.).
Un certain nombre d'alternatives:
Un ) Réécrire l'application interne pour utiliser des chemins relatifs au lieu de absolus. c'est ../css/style.css
à dire au lieu de/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 ) Un et deux sont souvent improbables… Si vous avez de la chance, l'application interne utilise uniquement deux ou trois sous - répertoires et ceux qui ne sont pas utilisés sur votre site principal , écrivez simplement 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 inversez simplement le 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>
Cinq ) Parfois , les développeurs sont complètement désemparés et leurs applications génèrent non seulement URL absolue de même , mais comprennent la partie de nom d' hôte dans leur apparence et de le code HTML résultant URL comme ceci: <img src=http://test.example.com/icons/logo.png>
.
A ) Vous pouvez utiliser la solution combinée d'un DNS fractionné Horizon et du scénario 4. Les utilisateurs internes et externes utilisent le test.example.com, mais votre DNS interne pointe directement sur l'adresse IP du serveur de test.example.com. Pour les utilisateurs externes, l'enregistrement public de test.example.com pointe sur l'adresse IP de votre serveur Web public www.example.com. Vous pourrez ensuite utiliser la solution 4.
B ) Vous pouvez réellement obtenir Apache pour non seulement des demandes de proxy à test.example.com, mais également pour réécrire le corps de la réponse avant qu'elle ne soit transmise à vos utilisateurs. (Normalement, un proxy ne réécrit que les en-têtes / réponses HTTP). mod_substitute in apache 2.2. Je n'ai pas testé si cela fonctionne bien avec mod_proxy, mais peut-être que ça marche:
<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>