Dapatkah Apache melakukan penulisan ulang dari header http khusus secara kondisional?

12

Saya memiliki server apache di belakang penyeimbang beban (amazon sederhana). Saya ingin mengarahkan lalu lintas masuk yang tidak 443 ke 443. Saya lebih suka menggunakan hanya satu host virtual apache. Jadi saya mencoba mendeteksi bahwa jika tajuk HTTP_X_FORWARDED_PORT bukan 443.

Saya telah memeriksa dokumen RewriteCond dan hanya berfungsi dengan set header HTTP terbatas.

Pada dasarnya yang saya lakukan adalah ini:

<VirtualHost *:80>
        ServerName www.example.com

        RewriteEngine On
        RewriteCond %{HTTP_X_FORWARDED_PORT} !=443
        RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

        ....
</VirtualHost>

Tetapi RewriteCond tidak mengenali HTTP_X_FORWARDED_PORT.

Apakah ada cara lain untuk mencapai ini (hanya dengan satu VirtualHost)? (beberapa jenis cek tajuk masuk?)

Terima kasih, Lance

Lance Bergegas
sumber

Jawaban:

13

Sedikit lebih jauh ke bawah RewriteConddokumen:

%{HTTP:header}, tempat tajuk dapat berupa nama tajuk HTTP MIME

Jadi, Anda bisa melakukannya, hanya saja tidak dalam bentuk yang sama dengan header yang sudah diekstraksi.

Coba ini:

RewriteCond %{HTTP:X-Forwarded-Port} !=443
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Shane Madden
sumber
1
Contoh lain dengan alamat IP dalam header yang disahkan oleh SiteLock CDN:RewriteCond %{HTTP:X-Forwarded-For} !=123.45.67.89
Liam