我已尝试过使用SSL的Codeigniter的大部分解决方案,但没有一个能够正常工作。
我需要的是整个网站在SSL下运行,它是一个有很多表单并显示来自数据库的数据的网站,比如管理部分,所以使用的唯一资源是css,js和一些图像没有别的。
这是我在config.php文件中的内容。
$config['base_url'] = 'https://admin.example.ie/';
主要.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
order deny,allow
deny from all
allow from 86.XXX.XXX.XXX
应用/ htaccess的
Options -Indexes
Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ index.php?/$1 [L]
#When your application folder isn't in the system folder
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>
这部分有效。
这是访问主页时的var_dump($ _ SERVER)。
["FCGI_ROLE"]=> string(9) "RESPONDER"
["HTTPS"]=> string(2) "on"
["SSL_TLS_SNI"]=> string(28) "admin.example.ie"
["HTTP_HOST"]=> string(28) "admin.example.ie"
["HTTP_USER_AGENT"]=> string(72) "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0)
["HTTP_CONNECTION"]=> string(5) "close"
["SERVER_SIGNATURE"]=> string(74) " Apache Server at admin.example.ie Port 443"
["SERVER_SOFTWARE"]=> string(6) "Apache"
["SERVER_NAME"]=> string(28) "admin.example.ie"
["SERVER_ADDR"]=> string(15) "XXX.XXX.XXX.XXX"
["SERVER_PORT"]=> string(3) "443"
["REMOTE_ADDR"]=> string(11) "86.XXX.XXX.XXX"
["REMOTE_PORT"]=> string(5) "58332"
["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1"
["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1"
["REQUEST_METHOD"]=> string(3) "GET"
因为我可以看到SSL在这里工作。 但是,如果我输入我的登录名和密码(主页只是登录页面)并转到登录用户的主页,我将失去安全连接。
["FCGI_ROLE"]=> string(9) "RESPONDER"
["REDIRECT_STATUS"]=> string(3) "200"
["HTTP_HOST"]=> string(28) "admin.example.ie"
["HTTP_USER_AGENT"]=> string(72) "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"
["HTTP_CONNECTION"]=> string(5) "close"
["SERVER_SIGNATURE"]=> string(73) "Apache Server at admin.example.ie Port 80"
["SERVER_SOFTWARE"]=> string(6) "Apache"
["SERVER_NAME"]=> string(28) "admin.example.ie"
["SERVER_ADDR"]=> string(15) "217.XXX.XXX.XXX"
["SERVER_PORT"]=> string(2) "80"
["REMOTE_ADDR"]=> string(11) "86.XXX.XXX.XXX"
["REMOTE_PORT"]=> string(5) "58392"
["REDIRECT_URL"]=> string(15) "/employee/home"
["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1"
["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1"
["REQUEST_METHOD"]=> string(3) "GET"
["REQUEST_URI"]=> string(15) "/employee/home"
关于为什么会发生这种情况的任何想法。我们可以通过此安全漏洞将此项目移交给客户。
答案 0 :(得分:1)
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
尝试在其他规则之前将其添加到htaccess的顶部。
不要复制RewriteEngine On
另外,您如何在应用中构建网址和表单操作?我会使用<a href=/secure_page>
代替<a href=http://page>
。
答案 1 :(得分:1)
我已经厌倦了尝试修复这个问题所以我开始使用新的CodeIgniter安装,它运行起来。
将base_url作为
$config['base_url'] = 'https://admin.example.ie/';
一切正常,我使用这些代码重建了网站。现在一切都很完美,我检查每个页面上的端口和https状态,检查一切正常。