Apache ProxyPassRewrite non riscrive i corpi di risposta ricevuti da http://test.example.com , solo le intestazioni (come i reindirizzamenti a una pagina 404 e simili).
Una serie di alternative:
Uno ) Riscrivi l'app interna per utilizzare percorsi relativi anziché assoluti. cioè ../css/style.css
invece di/css/style.css
Due ) Ridistribuire l'app interna nella stessa sottodirectory /folder
anziché nella radice di test.example.com.
Tre ) È improbabile che accada uno e due ... Se sei fortunato, l'app interna utilizza solo due o tre sottodirectory e quelle non sono utilizzate sul tuo sito principale , scrivi semplicemente un mucchio di righe 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/
Quattro ) Crea un sottodominio separato per l'app interna e inverti semplicemente il 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>
Cinque ) A volte gli sviluppatori sono completamente incapaci e hanno le loro applicazioni non solo generano URL assoluto, ma comprendono anche la parte hostname nella loro URL e le conseguenti sguardi di codice HTML come questo: <img src=http://test.example.com/icons/logo.png>
.
A ) È possibile utilizzare la soluzione combinata di un DNS split horizon e dello scenario 4. Sia gli utenti interni che quelli esterni utilizzano test.example.com, ma il DNS interno punta direttamente all'indirizzo IP del server test.example.com. Per gli utenti esterni il record pubblico per test.example.com punta all'indirizzo IP del server Web pubblico www.example.com e quindi è possibile utilizzare la soluzione 4.
B ) Puoi effettivamente ottenere apache per non solo inviare richieste proxy a test.example.com, ma anche riscrivere il corpo della risposta prima che venga trasmesso ai tuoi utenti. (Normalmente un proxy riscrive solo le intestazioni / le risposte HTTP). mod_substitute in apache 2.2. Non ho testato se si impila bene con mod_proxy, ma forse le seguenti funzioni:
<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>