É possível substituir o conteúdo de todas as páginas passadas por um proxy semelhante ao modo como o mod_rewrite é usado para URLs? A documentação sobre substituto não é clara.
Eu tenho algumas páginas, sou proxy reverso que possui caminhos absolutos. Isso quebra o site. Eles precisam ser substituídos e ferramentas como mod_rewrite não as estão coletando, pois não são solicitações de URL.
<VirtualHost *:80>
ServerName servername1
ServerAlias servername2
ErrorLog "/var/log/proxy/jpuat_prox_error_log"
CustomLog "/var/log/proxy/jpuat_prox_access_log" common
RewriteEngine on
LogLevel alert rewrite:trace2
RewriteCond %{HTTP_HOST} /uat.site.co.jp$ [NC]
RewriteRule ^(.*)$ http://jp.uat.site2uk.co.uk/$1 [P]
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|i"
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://uat.site.co.jp/
ProxyPassReverse / http://uat.site.co.jp/
</VirtualHost>
Nenhuma das opções acima funciona na substituição da string HTML
<link href="/server///uat.site.co.jp/css/css.css
com
<link href="/server///uat.site2uk.co.uk/css/css.css
Conf após alterações:
<VirtualHost *:80>
ServerName jp.uat.site2uk.co.uk
ServerAlias uat.site.co.jp
ErrorLog "/var/log/proxy/jpuat_prox_error_log"
CustomLog "/var/log/proxy/jpuat_prox_access_log" common
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://uat.site.co.jp/
ProxyPassReverse / http://uat.site.co.jp/
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|ni"
</VirtualHost>
a
tag HTML . Clicar nesse link provavelmente não resultará no navegador da Web seguindo o link, mas em um navegador de arquivos (Windows Explorer) tentando abrir o UNC. Você está tentando substituir essa string no texto HTML?link
tags. Se puder, não posso dizer que seria uma boa ideia. De qualquer forma, essa não é sua pergunta. De acordo com os documentos do Apache , asubstitute
diretiva é válida apenas dentro deDirectory
blocos ou.htaccess
arquivos. Tente criar um<location>
bloco (mesmo que seja para /) e coloque a diretiva lá.Respostas:
Há um módulo apache chamado mod_substitute que pode fazer isso. Aqui está um pequeno exemplo:
Ou, quando combinado com mod_proxy:
Há mais informações na documentação do Apache para mod_substitute .
fonte
Se você não reiniciou o Apache, certifique-se de fazer isso, mas se já o fez, tente um filtro de saída global que execute um script PHP personalizado para fazer sua substituição apenas para ver se isso o resolve por algum motivo. .
EDIT: com base no seu comentário, pode ser que o substituto não esteja funcionando porque o conteúdo está compactado. Para desativar a compactação, adicione essas linhas ao seu VirtualHost:
Se isso não funcionar, tente o seguinte:
Adicione-os à sua conf, atualizando os caminhos, é claro:
No proxyfilter.php, tenha um código como o seguinte:
Se isso funcionar, reduza o foco para apenas o conteúdo de texto / html, como no exemplo.
fonte
De acordo com https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypassreverse que reescreve os cabeçalhos, você usa "
fonte