O problema foi o espaço em branco após o "!=":
Versão de trabalho:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
complicado ...
Eu tenho um servidor recebendo algum tráfego de um balanceador de carga de terminação SSL - nesse caso ele vem como HTTP pela porta 80 com http_x_forwarded_proto
="https"
Eu quero uma regra mod_rewrite que permita apenas o tráfego HTTPS direto ou o tráfego HTTPS encaminhado.
Eu tenho isso até agora:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:http_x_forwarded_proto} != https
RewriteCond %{HTTP:http_x_forwarded_proto} != HTTPS
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
mas estou recebendo
RewriteCond: bad flag delimiters
erro.
O que preciso corrigir para que isso funcione e essa é a melhor abordagem?
Se o balanceador de carga sempre usar SSL ao se comunicar com o servidor, você precisará omitir a primeira verificação, pois ela sempre será verdadeira. (Se você estiver descarregando o SSL no balanceador de carga, a primeira linha será sempre verdadeira, a menos que alguém atinja diretamente o servidor usando SSL, caso em que seria falso e não tentaria redirecionar, pois X-Forwarded-Proto
estaria ausente.)
O código que estou usando, pois estamos sempre nos comunicando por SSL entre o ELB e o servidor da web:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Tags mod-rewrite apache-2.2