我强迫ssl遇到问题.我正在使用codeigniter并使用elasticbeanstalk在AWS单实例中部署它.我的htaccess规则如下:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R] RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php/$1 [L]
但浏览器进入重定向循环.无论我尝试什么都没有解决这个问题.
正如我在评论中提到的那样:
在ssl.conf中,来自端口443的每个调用都被"代理"到端口80,所以你永远不会得到https = on.
我做了一些测试,我发现ssl.conf中的ProxyPass指令不是简单地将每个请求从端口443重定向到localhost:80,而是基本上从头开始通过端口80向Apache重复请求(至少,这是什么我明白了).
我检查了$ _SERVER的值,发现在HTTPS请求期间设置了HTTP_X_FORWARDED_FOR,HTTP_X_FORWARDED_HOST和HTTP_X_FORWARDED_SERVER(但是在HTTP请求期间没有设置它们),同时在HTTPS请求期间SERVER_ADDR和REMOTE_ADDR设置为127.0.0.1(但是它们被设置为HTTP请求的不同值).
我假设你可以很容易地检查你的请求是否是普通的HTTP这样的东西(检查语法,我对Apache很垃圾):
RewriteCond %{ENV:HTTP_X_FORWARDED_SERVER} !^$
要么
RewriteCond %{ENV:SERVER_ADDR} !^127\.0\.0\.1
请注意:我在AWS文档中找不到任何引用,这只是一个经验结果......他们可以轻松地改变这种行为!
快乐的编码!:)