Apache ProxyPassRewrite, http://test.example.com adresinden alınan yanıt gövdelerini , yalnızca başlıkları (404 sayfasına yönlendirilenler gibi) yeniden yazmaz .
Bir dizi alternatif:
Bir ) Mutlak yerine göreceli yolları kullanmak için iç uygulamayı yeniden yazın. yani ../css/style.css
yerine/css/style.css
İki ) Dahili uygulamayı /folder
test.example.com'un kökünden ziyade aynı alt dizinde yeniden konuşlandırın.
Üç ) Bir ve iki genellikle gerçekleşmesi muhtemel değildir ... Şanslıysanız, dahili uygulama yalnızca iki veya üç alt dizin kullanır ve bunlar ana sitenizde kullanılmazsa , basitçe bir sürü ProxyPass satırı yazın:
# 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/
Dört ) Dahili uygulama için ayrı bir alt etki alanı oluşturun ve proxy'yi her şeyin tersine çevirin:
<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>
Beş ) Bazen geliştiriciler tamamen kafayı yemişsiniz ve bunların uygulamaları mutlak URL üretmek ancak bu bile ana makine adı kendi URL yer ve elde edilen HTML kodu şöyle içermez sadece vardır: <img src=http://test.example.com/icons/logo.png>
.
A ) Bölünmüş ufukta bir DNS ve senaryo 4'ün birleşik çözümünü kullanabilirsiniz. Hem dahili hem de harici kullanıcılar test.example.com adresini kullanır, ancak dahili DNS'niz doğrudan test.example.com sunucusunun ip adresini gösterir. Harici kullanıcılar için test.example.com genel kaydı, genel web sunucunuzun www.example.com adresinin ip adresini gösterir ve daha sonra 4. çözümü kullanabilirsiniz.
B ) Gerçekten test.example.com için yalnızca proxy isteklerini değil , yanıt gövdesini de kullanıcılarınıza iletilmeden önce yeniden yazarak apache elde edebilirsiniz . (Normalde bir proxy yalnızca HTTP başlıklarını / yanıtlarını yeniden yazar). apache 2.2'de mod_substitute. Mod_proxy ile iyi istiflenip test edilmediğini test etmedim, ancak belki de aşağıdakiler işe yarar:
<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>