57

I've had to update my .htaccess from this:

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

to this:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

to get it working behind an AWS Elasic Load Balancer.

It all seems to work fine on AWS, but in my local environment I'm stuck in a redirect loop.

How I can get this setup to work correctly in both environments?

anubhava
  • 761,203
  • 64
  • 569
  • 643
greg
  • 6,853
  • 15
  • 58
  • 71
  • Are you running your local Apache server as a reverse proxy/load balancer? Have you set `RequestHeader set X-Forwarded-Proto "https"` in your local VirtualHost configuration? – kums Oct 29 '14 at 02:24

2 Answers2

117

To make it work in both environments you can combine both conditions:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
anubhava
  • 761,203
  • 64
  • 569
  • 643
2

I had a special case for a shared hosting (masterhost), everything was failing except:

  RewriteCond %{HTTP:X-Forwarded-Port} !443
  RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Nick Kovalsky
  • 5,378
  • 2
  • 23
  • 50