eme*_*his 19 .htaccess mod-rewrite ssl load-balancing heroku
我是云托管新手......
我正在开发一个PHP Web应用程序,它作为"Cedar"应用程序在Heroku上托管.Heroku为他们所有的子域提供"背负式"SSL,所以我可以正常加载https://myapp.herokuapp.com.但我也可以加载http://myapp.herokuapp.com.我想通过将http请求重定向到强制SSL https.
通常,这很容易.我只想使用mod_rewrite如下:
RewriteCond %{HTTPS} != on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)
但是这对HEROKU没有用!
看来SSL会在流量到达我的应用之前终止上游.因此%{HTTPS}从未满足条件,结果是重定向循环.我也试过以下,但也没有用:
RewriteCond %{SERVER_PORT} != 443 #<--also redirect loop
RewriteCond %{REQUEST_SCHEME} !https #<--also redirect loop
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何在上游终止时检测/重定向到HTTPS?
eme*_*his 46
花了一整天的时间,我明白了!
底线:Heroku设置自己的自定义标头以指示流量的ORIGINAL方案(在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]
Run Code Online (Sandbox Code Playgroud)
秘密酱是线HTTP:X-Forwarded-Proto.
希望这有助于其他人有同样的问题!在撰写本文时,有关于此的ZERO文档.
| 归档时间: |
|
| 查看次数: |
7618 次 |
| 最近记录: |