Apache ProxyPassRewriteは、http://test.example.comから受信した応答本文を書き換えず、ヘッダー(404ページへのリダイレクトなど)のみを書き換えます。
多数の選択肢:
1)内部アプリを書き換えて、絶対パスではなく相対パスを使用します。すなわちの../css/style.css
代わりに/css/style.css
2)/folder
test.example.comのルートではなく、同じサブディレクトリに内部アプリを再デプロイします。
3)1つと2つはほとんど発生しません...運が良ければ、内部アプリが2つまたは3つのサブディレクトリのみを使用し、メインサイトで使用されていない場合、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/
4)内部アプリ用に個別のサブドメインを作成し、すべてを単純にリバースプロキシします。
<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>
5)開発者は完全に無知であり、アプリケーションに絶対URLを生成させるだけでなく、URLにホスト名部分を含めることもあり、結果のHTMLコードは次のようになります<img src=http://test.example.com/icons/logo.png>
。
A)スプリットホライズンDNSとシナリオ4のコンボソリューションを使用できます。内部ユーザーと外部ユーザーの両方がtest.example.comを使用しますが、内部DNSはtest.example.comのサーバーのIPアドレスを直接指します。外部ユーザーの場合、test.example.comのパブリックレコードはパブリックWebサーバーwww.example.comのIPアドレスを指しているため、ソリューション4を使用できます。
B)実際には、test.example.comへのプロキシリクエストだけでなく、ユーザーに送信される前に応答本文を書き換えることもできます。(通常、プロキシはHTTPヘッダー/応答のみを書き換えます)。Apache 2.2のmod_substitute。mod_proxyとうまくスタックするかどうかはテストしていませんが、おそらく次のように動作します。
<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>