如何在Heroku Cedar堆栈上使用.htaccess重定向到HTTPS

pcww981p  于 2023-03-03  发布在  其他
关注(0)|答案(3)|浏览(106)

我是云托管新手...
我正在开发一个PHP Web应用程序,它作为一个“Cedar”应用程序托管在Heroku上。Heroku为它们所有的子域提供“piggy back”SSL,所以我可以很好地加载https://myapp.herokuapp.com。但是我也可以加载http://myapp.herokuapp.com。我想通过将http请求重定向到https来强制SSL。
通常,这很简单,我只需要使用mod_rewrite如下:

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

但这对Heroku没用

SSL似乎在流量到达我的应用之前就终止了上游。因此,%{HTTPS}条件从未满足,结果是重定向循环。我还尝试了以下方法,但也不起作用:

RewriteCond %{SERVER_PORT} != 443 #<--also redirect loop
RewriteCond %{REQUEST_SCHEME} !https #<--also redirect loop

所以我的问题是,当HTTPS在上游终止时,我如何检测/重定向到HTTPS?

3ks5zfa0

3ks5zfa01#

在这上面花了一整天的时间,我想通了!!
这个问题在《专业Heroku编程》一书中得到了雄辩的总结。
底线:Heroku设置自己的自定义报头来指示流量的原始方案(在SSL在负载平衡器终止之前)。
所以这在Heroku上的. htaccess文件中工作

##Force SSL 

#Normal way (in case you need to deploy to NON-heroku)
RewriteCond %{HTTPS} !=on

#Heroku way
RewriteCond %{HTTP:X-Forwarded-Proto} !https 

#If neither above conditions are met, redirect to https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

秘密调味汁是HTTP:X-Forwarded-Proto的线。
希望这能帮助其他有同样问题的人!在写这篇文章的时候,关于这方面的文档为零。

s71maibg

s71maibg2#

我在上面给出的答案中添加了一行,这样就不会破坏我的本地开发环境,因为它没有配置SSL:

# If header is present in the request
RewriteCond %{HTTP:X-Forwarded-Proto} .

(Note仅当all preceeding RewriteCond保持时才应用重写规则)。

hpcdzsge

hpcdzsge3#

如果heroku没有获取.htaccess文件,您可能必须使用heroku提供的自定义应用程序级Apache配置
基本上,你需要将此添加到您的个人资料:web: vendor/bin/heroku-php-apache2 -C apache_app.conf

相关问题