.htaccess重定向循环由http-->;https重写规则

.htaccess重定向循环由http-->;https重写规则,.htaccess,mod-rewrite,redirect,ssl,heroku,.htaccess,Mod Rewrite,Redirect,Ssl,Heroku,我们的代码在两个不同的服务器上运行。一个启用了https,另一个(“遗留”)没有。我们希望强制使用https,但仅限于SSL服务器 我添加了以下代码,但它导致了重定向循环 #Force SSL for everyone but legacy production RewriteCond %{HTTP_HOST} !legacy\.site\.com RewriteCond %{HTTPS} !=on #RewriteCond %{SERVER_PORT} !=443 #<--this al

我们的代码在两个不同的服务器上运行。一个启用了https,另一个(“遗留”)没有。我们希望强制使用https,但仅限于SSL服务器

我添加了以下代码,但它导致了重定向循环

#Force SSL for everyone but legacy production
RewriteCond %{HTTP_HOST} !legacy\.site\.com
RewriteCond %{HTTPS} !=on
#RewriteCond %{SERVER_PORT} !=443 #<--this also causes redirect loop
#RewriteCond %{REQUEST_SCHEME} != https #<--this causes a 500 error!
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
为什么?


更新服务器是Heroku Cedar应用程序,它使用“背驮式”SSL:

您的服务器可能未设置
HTTPS
变量。尝试使用
服务器\u端口

RewriteCond %{HTTP_HOST} !^legacy\.site\.com$
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

非常感谢@anubhava和@arco444提供的深思熟虑的评论

事实证明,我遇到的重定向循环是由于SSL终止于Heroku Cedar堆栈应用程序的上游。这意味着流量的最后一段永远不会是https,因此普通技术将永远重定向=重定向循环

#Force SSL for everyone but legacy production
RewriteCond %{HTTP_HOST} !legacy\.site\.com
RewriteCond %{HTTPS} !=on
#RewriteCond %{SERVER_PORT} !=443 #<--this also causes redirect loop
#RewriteCond %{REQUEST_SCHEME} != https #<--this causes a 500 error!
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
解决这个问题的方法(在Heroku上)是为他们的特殊定制头
X-Forwarded-Proto
添加一个RewriteCond。所以这是可行的:

##Force SSL for everyone but legacy production
RewriteCond %{HTTP_HOST} !legacy\.site\.com 
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

只要你不去legacy.site.com,这个循环就不会停止吗?这是哪个虚拟主机?获取循环时要访问的站点的名称是什么<代码>site.com
subdomain.site.com
?你的.htaccess中有更多的规则吗?@arco444我不这么认为,它应该保持循环,因为它重定向到
https
,这意味着第二个条件应该失败,对吗?获取循环的URL是
new.site.com
@anubhava我刚刚用其余的规则更新了这个问题。这是你正在使用的某个CMS框架吗?我尝试了这个,但也不起作用。仍然重定向循环。我将更新问题中的代码以显示我做了什么。打开Firebug并访问
http://domain.com/
在浏览器中,查看您在
Net
选项卡中获得的重定向。对,但这些重定向是什么?是否在
http://
https://
之间交替?否。在第一个之后(由“其他”启动),它们都是
https://new.site.com
同样的事情也会发生。重定向循环。很好地完成了这个排序-当然是一个不可行的任务!