新浪云标准运行环境实现全部请求转到HTTPS

通过.htaccess实现

RewriteEngine on  
RewriteCond %{HTTP:X-FORWARDED-PROTO} !^https$  
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]  

通过config.yaml 实现

handle:  
- rewrite: if (%{REQ:X-Forwarded-Proto} != "https") goto "https://%{HTTP_HOST}%{REQUEST_URI}"

为什么以下写法(.htaccess)是不对的

RewriteEngine on  
RewriteCond %{HTTPS} off  
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]  

因为请求在到用户的代码运行环境时,传输的协议已经改为http了,HTTPS连接是实际访问网站的人和新浪云的负载均衡之间建立的,新浪云会把实际的HTTPS请求模式通过header头带到运行环境中去。因此Apache看到的不再是HTTPS。