使用SSL的codeigniter文件夹结构



大家好,我们正在开发一个CI应用程序,它提供公共广告和私有(安全)访问。我没有实现SSL之前,但我明白,设置的一部分是指定哪些文件夹应使用https访问。

我想要一些建议,关于我应该如何组织我的文件夹,以方便。

setup是否只影响controllers文件夹?换句话说,我应该拆分我的应用程序控制器之间的公共和安全子文件夹下的标准CI控制器文件夹?

我需要对我的视图和模型文件夹做些什么吗?还有什么我需要注意的吗?

感谢您的帮助。

谢谢

按照你想要的方式分割的最好方法是:

  1. 将CodeIgniter应用程序设置在一个文件夹下,设置为/var/www,并确保一切都如您所愿。
  2. 将CodeIgniter的config.php下的站点的基础url设置为"/"。
  3. 为站点的安全部分创建一个Apache虚拟主机,监听端口443或其他端口上的请求。安装证书,等等。http://www.namecheap.com对证书有好处。将web根目录设置为CodeIgniter文件夹,例如/var/www.
  4. 创建另一个Apache虚拟主机,指向相同的目录,例如不安全的版本的网站/var/www。

如果一切顺利,您现在可以使用https或标准http访问整个站点。我想你提到了能够更进一步,只允许通过HTTPS和某些不安全访问某些控制器。我要做的是:

    在你的application/libraries文件夹下创建一个CodeIgniter库,命名为Ssl.php。输入以下代码:

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连接的控制器方法,只需在任何执行开始之前调用$this->ssl->require()方法。

您甚至可以更进一步,在类控制器__construct()函数中删除对require()的方法调用,甚至可以在您希望扩展的整个新控制器中删除。

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

我觉得你有点糊涂了。据我所知,如果你使用Apache,你只能通过创建一个新的网站或"虚拟主机"来建立一个SSL启用的网站。

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

有什么理由不能让你的整个应用程序通过SSL运行吗?而不是加密和非加密的部分?SSL有一个小的CPU开销,但它是最小的。

我希望这对你有帮助。

编辑回应评论:

欢迎你。这是一个最小的开销。为了避免麻烦,我只是简单地将其全部放在SSL虚拟主机下。另外,如果你要在SSL/非SSL之间分割内容,你可能会注意到,如果你在SSL页面上包含基于非SSL的内容,用户将在浏览器中收到关于"不安全内容"等烦人的消息,这可能会让他们离开并产生一些不必要的疑问。

按照您的需要拆分可能相当困难,因为您需要为每个vhost单独的根index.php CI文件,以允许CI正确路由它。你不能只设置一个vhost服务于一个目录,比如application/controllers/private/,因为CodeIgniter不知道如何处理请求,除非对它的核心路由进行一些严重的修改。

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

最新更新