Codeigniter与SSL无法正常工作

时间:2014-03-31 14:30:35

标签: codeigniter ssl

我已尝试过使用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" 

关于为什么会发生这种情况的任何想法。我们可以通过此安全漏洞将此项目移交给客户。

2 个答案:

答案 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状态,检查一切正常。