Czy możliwe jest zastąpienie treści na każdej stronie przechodzącej przez serwer proxy podobnie jak w przypadku mod_rewrite dla adresów URL? Dokumentacja zastępcza nie jest jasna.
Mam kilka stron, które odwracam, które mają ścieżki bezwzględne. To psuje witrynę. Potrzebują wymiany, a narzędzia takie jak mod_rewrite nie wychwytują ich, ponieważ nie są żądaniami adresów 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>
Żadne z powyższych nie zastępuje ciągu HTML
<link href="/server///uat.site.co.jp/css/css.css
z
<link href="/server///uat.site2uk.co.uk/css/css.css
Konf. Po zmianach:
<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
tagu HTML . Kliknięcie tego łącza prawdopodobnie nie spowoduje, że przeglądarka internetowa podąży za nim, a raczej przeglądarka plików (Eksplorator Windows), która spróbuje otworzyć UNC. Czy próbujesz zastąpić ten ciąg w tekście HTML?link
tagach. Jeśli możesz, nie mogę powiedzieć, że byłby to dobry pomysł. W każdym razie to nie twoje pytanie. Według dokumentów Apache ,substitute
dyrektywa obowiązuje tylko wDirectory
blokach lub.htaccess
plikach. Spróbuj utworzyć<location>
blok (nawet jeśli jest dla /) i umieść tam dyrektywę.Odpowiedzi:
Istnieje moduł apache o nazwie mod_substitute, który może to zrobić. Oto krótki przykład:
Lub w połączeniu z mod_proxy:
Więcej informacji znajduje się w dokumentacji Apache dla mod_substitute .
źródło
Jeśli nie zrestartowałeś Apache, pamiętaj, aby to zrobić, ale jeśli już to zrobiłeś, możesz wypróbować globalny filtr wyjściowy, który uruchamia niestandardowy skrypt PHP w celu zastąpienia, aby sprawdzić, czy to z jakiegoś powodu go rozwiązuje. .
EDYCJA: na podstawie twojego komentarza może się zdarzyć, że substytut nie działa, ponieważ zawartość jest skompresowana. Aby wyłączyć kompresję, dodaj te linie do VirtualHost:
Jeśli to nie zadziała, spróbuj wykonać następujące czynności:
Dodaj je do swojego conf, aktualizując oczywiście ścieżki:
W proxyfilter.php mają kod taki jak poniżej:
Jeśli to działa, zawęź to pole do treści tekstowej / HTML tak jak w przykładzie.
źródło
Zgodnie z https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypassreverse, który przepisuje nagłówki, używasz „
źródło