Apache ProxyPassRewrite schreibt die von http://test.example.com empfangenen Antworttextkörper nicht um, sondern nur die Header (wie Weiterleitungen zu einer 404-Seite usw. ).
Eine Reihe von Alternativen:
Erstens : Schreiben Sie die interne App neu, um relative Pfade anstelle von absoluten Pfaden zu verwenden. dh ../css/style.css
statt/css/style.css
Zwei ) Stellen Sie die interne App erneut in demselben Unterverzeichnis /folder
und nicht im Stammverzeichnis von test.example.com bereit.
Drei ) Eins und zwei sind oft unwahrscheinlich ... Wenn Sie Glück haben, dass die interne App nur zwei oder drei Unterverzeichnisse verwendet und diese auf Ihrer Hauptseite nicht verwendet werden , schreiben Sie einfach ein paar ProxyPass-Zeilen:
# 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/
Vier ) Erstellen Sie eine separate Subdomain für die interne App und kehren Sie einfach den Proxy um:
<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>
Fünf ) Manchmal Entwickler sind völlig ahnungslos und haben ihre Anwendungen nicht nur absolute URLs erzeugen , sondern auch den Hostnamen an ihre URLs enthalten und die resultierende HTML - Code sieht wie folgt aus : <img src=http://test.example.com/icons/logo.png>
.
A ) Sie können eine kombinierte Lösung aus einem Split-Horizon-DNS und Szenario 4 verwenden. Sowohl interne als auch externe Benutzer verwenden test.example.com, aber Ihr interner DNS verweist direkt auf die IP-Adresse des Servers von test.example.com. Für externe Benutzer verweist der öffentliche Datensatz für test.example.com auf die IP-Adresse Ihres öffentlichen Webservers www.example.com, und Sie können dann Lösung 4 verwenden.
B ) Sie können Apache dazu bringen, nicht nur Proxy-Anforderungen an test.example.com zu senden, sondern auch den Antworttext neu zu schreiben, bevor er an Ihre Benutzer übertragen wird. (Normalerweise schreibt ein Proxy nur HTTP-Header / -Antworten um). mod_substitute in apache 2.2. Ich habe nicht getestet, ob es mit mod_proxy gut stapelt, aber vielleicht funktioniert Folgendes:
<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>