使用SSL的codeigniter文件夹结构

时间:2011-04-21 20:44:23

标签: codeigniter ssl https

嘿伙计们,开发一个CI应用程序,提供公共广告以及私人(安全)访问。我之前没有实现SSL,但我知道部分设置是指定应使用https访问哪些文件夹。

我想就如何构建我的文件夹以促进这一点提出一些建议。

设置是否仅影响控制器文件夹?换句话说,我应该在标准CI控制器文件夹下的公共和安全子文件夹之间拆分我的app控制器吗?

我是否需要对我的观点和模型文件夹执行任何操作?还有什么我应该注意的吗?

我们将不胜感激。

感谢

2 个答案:

答案 0 :(得分:3)

确定以你想要的方式分解的最好方法是:

  1. 在一个文件夹下设置CodeIgniter应用程序,例如/var/www并确保一切正常。
  2. 将CodeIgniter的config.php下的网站的基本网址设置为“/".
  3. 为站点的 secure 部分创建Apache虚拟主机,侦听端口443或其他任何请求。安装证书等。 http://www.namecheap.com对证书有用。将Web根设置为CodeIgniter文件夹,例如的/ var /万维网。
  4. 创建另一个Apache虚拟主机,指向同一目录,例如/ var / www用于 unsecure 版本的网站。
  5. 现在,您现在一切顺利,在此阶段可以使用https或标准http访问整个网站。我想你提到能够通过只允许通过HTTPS和某些不安全访问某些控制器来更进一步。我将为此做的是以下内容。

    1. 在您的application / libraries文件夹下创建一个CodeIgniter库,称之为Ssl.php。输入以下代码:
    2. class Ssl {
      
          public function require()
          {
              // Is the current request method secure, via SSL?
              if ( ! isset($_SERVER['https']) )
              {
                  // No. Do something here, display an error, redirect... up to you
                  show_error("This resource must be accessed through an SSL encrypted connection.");
              }
          }
      
      }
      

      现在,在您的应用程序控制器中,只需按常规方式加载库$this->load->library('ssl'),对于您希望需要 SSL连接的任何控制器方法,只需调用{{1任何执行开始之前的方法。

      您甚至可以更进一步,将该方法调用放入类控制器$this->ssl->require()函数中的require(),或者甚至是您希望扩展的整个新控制器。

      我希望这会有所帮助。

答案 1 :(得分:0)

嘿,我正在开发一个使用HTTPS / SSL成功运行的CI应用程序。

我觉得你有点困惑。据我所知,您只能通过创建新站点或“虚拟主机”来设置启用SSL的站点(如果您使用的是Apache)。

所以基本上如果您使用的是Apache,您可以创建一个虚拟主机来处理端口443上的请求,例如https://example.com,然后将Web根设置为/ var / www或CI应用程序所在的位置。一旦您购买了证书并在生成证书请求后下载了位和bobs,您还必须配置Apache以使用您的证书文件。它听起来比听起来容易。

为什么你不能只让整个应用程序通过SSL运行?而不是加密和非加密部分? SSL的CPU开销很小,但它很小。

我希望这有助于这种或那种方式。

编辑回应评论:

欢迎你。这是一个最小的开销。对于麻烦,我只是简单地把它全部放在SSL虚拟机下。另外,如果您要在SSL /非SSL之间拆分内容,您可能会注意到如果您在SSL页面上包含非基于SSL的内容,用户将在浏览器中收到关于“不安全内容”等的令人讨厌的消息,这可能是把它们关掉并制造一些不必要的怀疑。

根据需要进行拆分可能非常困难 - 因为您需要为每个虚拟主机分配根index.php CI文件,以允许CI正确路由它。你不能只设置一个vhost服务于一个目录,例如application / controllers / private /,因为CodeIgniter不知道如何处理请求而不对它的核心路由进行一些严格的修改。

老实说,我只是将所有内容都放在SSL虚拟主机下。或者,另一种选择是设置从同一系统/核心CI文件夹运行的两个CI应用程序......如果这有意义,但是共享内容(如库和模型)将变得乏味。