Может ли Apache условно выполнить перезапись из пользовательского http-заголовка?

12

У меня есть сервер Apache за (простой Amazon) балансировщик нагрузки. Я хочу перенаправить любой входящий трафик, который не 443 на 443. Я бы предпочел использовать только один виртуальный хост Apache. Поэтому я пытаюсь обнаружить это, если заголовок HTTP_X_FORWARDED_PORT не 443.

Я проверил документы RewriteCond, и они работают только с ограниченным набором заголовков HTTP.

В основном то, что я делаю, это:

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

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

        ....
</VirtualHost>

Но RewriteCond не распознает HTTP_X_FORWARDED_PORT.

Есть ли другой способ сделать это (только с одним VirtualHost)? (какой-нибудь тип проверки входящего заголовка?)

Спасибо ланс

Ланс Рашинг
источник

Ответы:

13

Чуть дальше по RewriteCondдокументу:

%{HTTP:header}где заголовок может быть любым именем HTTP-заголовка MIME

Таким образом, вы можете сделать это, но не в той же форме, что и предварительно извлеченные заголовки.

Попробуй это:

RewriteCond %{HTTP:X-Forwarded-Port} !=443
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Шейн Мэдден
источник
1
Другой пример с IP-адресом в заголовке, переданном SiteLock CDN:RewriteCond %{HTTP:X-Forwarded-For} !=123.45.67.89
Лиам