Apache peut-il effectuer une réécriture conditionnelle à partir d'un en-tête http personnalisé?

12

J'ai un serveur apache derrière un équilibreur de charge (simple amazon). Je veux rediriger tout trafic entrant qui n'est pas de 443 à 443. Je préférerais qu'il utilise un seul hôte virtuel apache. J'essaie donc de détecter cela si l'en-tête HTTP_X_FORWARDED_PORT n'est pas 443.

J'ai vérifié les documents RewriteCond et cela ne fonctionne qu'avec un ensemble limité d'en-têtes HTTP.

Fondamentalement, ce que je fais est le suivant:

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

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

        ....
</VirtualHost>

Mais RewriteCond ne reconnaît pas HTTP_X_FORWARDED_PORT.

Existe-t-il un autre moyen d'y parvenir (avec un seul VirtualHost)? (un type de vérification d'en-tête entrant?)

Merci, Lance

Lance Rushing
la source

Réponses:

13

Un peu plus loin dans le RewriteConddocument:

%{HTTP:header}, où l'en-tête peut être n'importe quel nom d'en-tête MIME HTTP

Donc, vous pouvez le faire, tout simplement pas sous la même forme que les en-têtes pré-extraits.

Essaye ça:

RewriteCond %{HTTP:X-Forwarded-Port} !=443
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Shane Madden
la source
1
Un autre exemple avec une adresse IP dans un en-tête transmis par SiteLock CDN:RewriteCond %{HTTP:X-Forwarded-For} !=123.45.67.89
Liam