Apakah mungkin untuk mengganti konten pada setiap halaman yang dilewatkan melalui proxy yang mirip dengan bagaimana mod_rewrite digunakan untuk URL? Dokumentasi tentang pengganti tidak jelas.
Saya memiliki beberapa halaman, saya membalikkan proxy yang memiliki jalur absolut. Ini merusak situs. Mereka perlu diganti dan alat-alat seperti mod_rewrite tidak mengambilnya karena bukan permintaan 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>
Tidak satu pun di atas berfungsi untuk mengganti string HTML
<link href="/server///uat.site.co.jp/css/css.css
dengan
<link href="/server///uat.site2uk.co.uk/css/css.css
Konf setelah perubahan:
<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 . Mengklik tautan itu kemungkinan tidak akan menghasilkan peramban web mengikuti tautan, melainkan peramban berkas (Windows Explorer) yang mencoba membuka UNC. Apakah Anda mencoba mengganti string itu dalam teks HTML?link
tag. Jika Anda bisa, saya tidak bisa mengatakan itu akan menjadi ide yang bagus .. Bagaimanapun, itu bukan pertanyaan Anda. Menurut dokumentasi Apache ,substitute
arahan hanya valid di dalamDirectory
blok atau.htaccess
file. Coba buat<location>
blok (bahkan jika itu untuk /) dan masukkan arahan di sana.Jawaban:
Ada modul apache bernama mod_substitute yang dapat melakukan ini. Ini contoh singkatnya:
Atau, ketika dikombinasikan dengan mod_proxy:
Ada informasi lebih lanjut di dokumentasi Apache untuk mod_substitute .
sumber
Jika Anda belum memulai ulang Apache, pastikan untuk melakukannya, tetapi jika Anda sudah melakukannya, Anda dapat mencoba filter keluaran global yang menjalankan skrip PHP khusus untuk melakukan penggantian hanya untuk melihat apakah itu menyelesaikannya karena suatu alasan .
EDIT: berdasarkan komentar Anda, bisa jadi pengganti itu tidak berfungsi karena kontennya dikompres. Untuk mematikan kompresi, tambahkan baris ini ke VirtualHost Anda:
Jika itu tidak berhasil, coba yang berikut ini:
Tambahkan ini ke conf Anda, memperbarui jalur tentu saja:
Di proxyfilter.php ada beberapa kode seperti berikut:
Jika ini berhasil, maka persempit fokus ini menjadi hanya teks / konten html seperti yang Anda miliki dalam contoh Anda.
sumber
Menurut https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypassreverse yang menulis ulang header, Anda menggunakan "
sumber