Is it possible to replace content on every page passed through a proxy similar to how mod_rewrite is used for URLs?
There's an apache module called mod_substitute that can do this. Here's a short example:
<Location "/"> AddOutputFilterByType SUBSTITUTE text/html Substitute "s/uat.site.co.jp/jp.uat.site2uk.co.uk/ni" </Location>
Or, when combined with mod_proxy:
ProxyPass / http://uat.site.co.jp/ ProxyPassReverse / http://uat.site.co.jp/ Substitute "s|http://uat.site.co.jp/|http://jp.uat.site2uk.co.uk/|i"
There's more information at the Apache documentation for mod_substitute.
If you haven't restarted Apache, be sure to do that, but if you've already done so, you could try a global output filter that runs a custom PHP script to do your replacing just to see if that solves it for some reason.
EDIT: based on your comment, it could be that substitute isn't working because the content is compressed. To turn off compression, add these lines to your VirtualHost:
RequestHeader unset Accept-Encoding RequestHeader set Accept-Encoding identity
If that doesn't work, try the following:
Add these to your conf, updating the paths of course:
#add this outside of any VirtualHost tags ExtFilterDefine proxiedcontentfilter mode=output cmd="/usr/bin/php /var/www/proxyfilter.php" #add these in your VirtualHost tag RequestHeader unset Accept-Encoding RequestHeader set Accept-Encoding identity SetOutputFilter proxiedcontentfilter
In proxyfilter.php have some code like the following:
#!/usr/bin/php <?php $html = file_get_contents('php://stdin'); $html = str_ireplace('uat.site.co.jp', 'jp.uat.site2uk.co.uk', $html); file_put_contents('php://stdout', $html);
If this works, then narrow the focus of this to just text/html content as you have in your example.