强制HTTPS瓦特/负载平衡器没有(.htaccess重写)

我有以下代码作为重写规则。

RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

这似乎很好地使用和不使用ssl终止的负载平衡器。 我的问题:

如果我删除RewriteCond %{HTTPS} off我直接访问Web服务器时得到一个无限的redirect(我需要这个工作,而DNS传播)

我只是被这个规则弄糊涂了

rewritecond应该是:ed,因为任何时候通常只有一个条件是真的。 然而,这将需要额外的语法forms的OR指令: 可以减lessrewriteRule一个规则从多个RewriteConds为301在htaccess?

第一个rewritecond检查连接使用的协议是否不是https。 如果parsing为true,则将httpsredirect发送到客户端。

第二个rewritecond检查ssl是否已经被终止(例如在负载均衡器中),在这个x-forwarded-proto http头将被注入https的值。 如果标头值不是https,则redirect到https将被发送到客户端。

直接连接到服务器时删除第一个条件将导致redirect循环。

在通过负载平衡器(或任何外部节点执行终止)连接的情况下移除第二个条件也将导致redirect循环。

我会尝试(未经testing,因为我在iPhone上):

 RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]