Ist es möglich, Inhalte auf jeder Seite zu ersetzen, die über einen Proxy geleitet wird, ähnlich wie mod_rewrite für URLs verwendet wird? Die Dokumentation zum Ersatz ist nicht klar.
Ich habe einige Seiten, die ich als Reverse-Proxy verwende und die absolute Pfade haben. Dies bricht die Website. Sie müssen ersetzt werden und Tools wie mod_rewrite nehmen sie nicht auf, da es sich nicht um URL-Anforderungen handelt.
<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>
Keiner der oben genannten Punkte funktioniert beim Ersetzen der HTML-Zeichenfolge
<link href="/server///uat.site.co.jp/css/css.css
mit
<link href="/server///uat.site2uk.co.uk/css/css.css
Conf nach Änderungen:
<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>
proxy
rewrite
reverse-proxy
apache-2.4
AirCombat
quelle
quelle
a
Tag. Wenn Sie auf diesen Link klicken, folgt wahrscheinlich nicht der Webbrowser dem Link, sondern ein Dateibrowser (Windows Explorer), der versucht, den UNC zu öffnen. Versuchen Sie, diese Zeichenfolge in HTML-Text zu ersetzen?link
Tags bereitstellen können . Wenn Sie können, kann ich nicht sagen, dass es eine gute Idee wäre. Auf jeden Fall ist das nicht Ihre Frage. Gemäß den Apache- Dokumenten ist diesubstitute
Direktive nur innerhalb vonDirectory
Blöcken oder.htaccess
Dateien gültig . Versuchen Sie, einen<location>
Block zu erstellen (auch wenn er für / ist), und fügen Sie die Direktive dort ein.Antworten:
Es gibt ein Apache-Modul namens mod_substitute, das dies kann. Hier ist ein kurzes Beispiel:
Oder in Kombination mit mod_proxy:
Weitere Informationen finden Sie in der Apache-Dokumentation für mod_substitute .
quelle
Wenn Sie Apache noch nicht neu gestartet haben, stellen Sie sicher, dass Sie dies tun. Wenn Sie dies jedoch bereits getan haben, können Sie einen globalen Ausgabefilter verwenden, der ein benutzerdefiniertes PHP-Skript ausführt, um das Ersetzen durchzuführen, um festzustellen, ob dies aus irgendeinem Grund behoben ist .
BEARBEITEN: Basierend auf Ihrem Kommentar kann es sein, dass der Ersatz nicht funktioniert, weil der Inhalt komprimiert ist. Fügen Sie Ihrem VirtualHost die folgenden Zeilen hinzu, um die Komprimierung zu deaktivieren:
Wenn dies nicht funktioniert, versuchen Sie Folgendes:
Fügen Sie diese zu Ihrer Conf hinzu und aktualisieren Sie natürlich die Pfade:
In proxyfilter.php haben Sie einen Code wie den folgenden:
Wenn dies funktioniert, beschränken Sie den Fokus auf Text- / HTML-Inhalte, wie Sie sie in Ihrem Beispiel haben.
quelle
Laut https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypassreverse, das die Header neu schreibt, verwenden Sie "
quelle