Saya dapat mengatur tautan dari halaman HTTPS ke halaman HTTP di domain lain dan masih meneruskan URL halaman pertama sebagai pengarah menggunakan teknik berikut.
Definisi
Halaman asal : Halaman HTTPS tempat tautan ke halaman tujuan yang di-host HTTP berada. Dalam contoh ini:https://example1.com/origin.html
Halaman tujuan : Halaman HTTP yang memiliki akses ke pengarah halaman asal. Dalam contoh ini:http://example2.com/destination.html
Rencana dasar
Ini memiliki efek membuat pengalihan berasal dari versi HTTP dari halaman asal:
Tautan pada HTTPS halaman asal tautan ke halaman saat ini tetapi menambahkan parameter permintaan untuk halaman tujuan [1]. misalnya:https://example1.com/origin.html?goto=http://example2.com/destination.html
Ketika tautan diklik, server di example1.com menginterupsi permintaan standar ketika parameter kueri 'goto' hadir. Kemudian:
- Menyimpan parameter 'goto' dalam cookie 'goto'.
- Menghapus parameter dan nilai 'goto' dari url permintaan saat ini
- 302 pengalihan ke url baru yang telah dibersihkan ini pada versi HTTP dari domain asal yaitu.
http://example1.com/origin.html
Server memeriksa setiap permintaan untuk cookie 'goto' dan jika ada akan menghapus cookie dan kemudian membuat halaman pengalihan yang sangat sederhana. Halaman ini berisi [2]:
- Skrip Javascript window.location.replace () yang mengalihkan ke url cookie goto.
- Tag Meta Refresh dengan nilai url cookie goto dan penundaan beberapa detik.
- Tautan ke url cookie goto.
Catatan
[1] Solusi dasar ini adalah redirector terbuka dan beberapa pertimbangan harus diberikan untuk melindungi orang jahat menggunakan parameter kueri goto untuk mengarahkan ulang UA dalam serangan phishing.
[2] Tidak semua browser akan mengirim pengarah saat mengarahkan melalui redirect JS atau tag meta refresh. Dalam pengujian saya IE8 dan lebih rendah tidak lulus pengarah.
Saya tidak yakin apakah teknik ini akan memungkinkan crawler mesin pencari untuk mengikuti tautan. Ini tidak penting untuk persyaratan saya.
Jika UA memiliki cookie yang dinonaktifkan maka ini hanya akan mengarahkan kembali ke halaman asal.
Mengizinkan koneksi HTTP hanya untuk pengalihan
Di server saya, saya memiliki aturan Apache untuk menegakkan HTTPS terlepas dari permintaan:
<VirtualHost *:80>
ServerName example1.com
# if not on port 443 then 301 redirect to https while keeping any query string
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example1\.com$ [NC]
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,QSA,R=301]
Agar teknik pengalihan di atas berfungsi, saya perlu beberapa cara untuk mengizinkan koneksi HTTP secara kondisional. Ada banyak cara untuk melakukan ini. Saya memutuskan cookie akan bekerja.
<VirtualHost *:80>
ServerName example1.com
# if not on port 443 then 301 redirect to https while keeping any query string
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example1\.com$ [NC]
RewriteCond %{SERVER_PORT} !443
RewriteCond %{HTTP_COOKIE} !disable_ssl [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,QSA,R=301]
Cookie disable_ssl akan ditetapkan di langkah 2 dan kemudian dihapus di langkah 3.
Origin
harus utuh, mungkin tidak cocok kasus penggunaan Anda sekalipun.