¿Es posible reemplazar el contenido en cada página pasada a través de un proxy similar a cómo se usa mod_rewrite para las URL? La documentación sobre el sustituto no es clara.
Tengo algunas páginas con proxy inverso que tienen rutas absolutas. Esto rompe el sitio. Deben reemplazarse y las herramientas como mod_rewrite no los recogen, ya que no son solicitudes 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>
Ninguno de los anteriores funciona para reemplazar la cadena HTML
<link href="/server///uat.site.co.jp/css/css.css
con
<link href="/server///uat.site2uk.co.uk/css/css.css
Conf después de los cambios:
<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
etiqueta HTML . Al hacer clic en ese enlace, es probable que el navegador web no siga el enlace, sino que un navegador de archivos (Windows Explorer) intente abrir la UNC. ¿Estás tratando de reemplazar esa cadena en el texto HTML?link
etiquetas. Si puedes, no puedo decir que sería una buena idea ... En cualquier caso, esa no es tu pregunta. Según los documentos de Apache , lasubstitute
directiva solo es válida dentro deDirectory
bloques o.htaccess
archivos. Intente crear un<location>
bloque (incluso si es para /) y coloque la directiva allí.Respuestas:
Hay un módulo apache llamado mod_substitute que puede hacer esto. Aquí hay un breve ejemplo:
O, cuando se combina con mod_proxy:
Hay más información en la documentación de Apache para mod_substitute .
fuente
Si no ha reiniciado Apache, asegúrese de hacerlo, pero si ya lo ha hecho, puede probar un filtro de salida global que ejecute un script PHP personalizado para reemplazarlo solo para ver si eso lo resuelve por alguna razón. .
EDITAR: según su comentario, podría ser que el sustituto no funcione porque el contenido está comprimido. Para desactivar la compresión, agregue estas líneas a su VirtualHost:
Si eso no funciona, intente lo siguiente:
Agregue estos a su conf, actualizando las rutas, por supuesto:
En proxyfilter.php tenemos un código como el siguiente:
Si esto funciona, entonces limite el enfoque a solo contenido de texto / html como lo ha hecho en su ejemplo.
fuente
De acuerdo con https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypassreverse que reescribe los encabezados, usa "
fuente