O Apache pode executar uma reescrita condicionalmente a partir de um cabeçalho http personalizado?

12

Eu tenho um servidor apache atrás de um balanceador de carga (simples da amazônia). Quero redirecionar qualquer tráfego de entrada que não seja 443 a 443. Prefiro que use apenas um host virtual apache. Portanto, estou tentando detectar se o cabeçalho HTTP_X_FORWARDED_PORT não é 443.

Verifiquei os documentos do RewriteCond e ele funciona apenas com um conjunto limitado de cabeçalhos HTTP.

Basicamente, o que estou fazendo é o seguinte:

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

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

        ....
</VirtualHost>

Mas RewriteCond não reconhece HTTP_X_FORWARDED_PORT.

Existe alguma outra maneira de fazer isso (com apenas um VirtualHost)? (algum tipo de verificação de cabeçalho de entrada?)

Obrigado, Lance

Lance Rushing
fonte

Respostas:

13

Um pouco mais abaixo no RewriteConddocumento:

%{HTTP:header}, em que cabeçalho pode ser qualquer nome de cabeçalho HTTP MIME

Portanto, você pode fazê-lo, mas não da mesma forma que os cabeçalhos pré-extraídos.

Tente o seguinte:

RewriteCond %{HTTP:X-Forwarded-Port} !=443
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Shane Madden
fonte
1
Outro exemplo com um endereço IP em um cabeçalho passado pelo SiteLock CDN:RewriteCond %{HTTP:X-Forwarded-For} !=123.45.67.89
Liam