【问题标题】:Separate CodeIgniter public folder单独的 CodeIgniter 公用文件夹
【发布时间】:2016-10-25 03:52:44
【问题描述】:

我一直在尝试更改我的 CodeIgniter 文件结构以使其更安全、更清洁,但我无法让它工作。我想将用户可见的应用程序/系统和公共文件分开。

- application
- system
- public

它可以工作,但我必须输入

example.com/public/index.php 或 example.com/public/controller

我希望能够只键入基本 URL,例如 example.com/controller。

我该怎么做?

【问题讨论】:

  • public 只是www 根目录或public_html 文件夹。然后将systemapplication 安装在www 根目录之外。
  • 我正在使用共享主机。我的 CI 目录的路径是 /var/www/myfolder/。我不知道我是否真的应该这样做,但我读到不分开文件夹是不安全的。
  • 你在哪里读到的?!官方文档明确指出您应该applicationsystem文件夹放在www根目录的上方。这实际上保证了公众永远不会看到它们,即使 .htaccess 文件失败。

标签: php .htaccess codeigniter


【解决方案1】:

对于 CodeIgniter 3.x,处理此问题的正确方法(在 2018 年及之后)如下:

  • 在您的根文件夹中创建一个public 文件夹
  • 将您的 index.php 文件移动到此文件夹中(以防止歧义)
  • 在移动的 index.php 文件中,更改以下内容:

    $system_path 更改为 ../system

    $application_folder 更改为../application

现在,我们需要一个 .htaccess 文件,但 CI 3.x 默认没有 .htaccess 文件,所以.. 从默认有它的 CI 4.x 中窃取它怎么样?你可以在这里找到它:

https://github.com/bcit-ci/CodeIgniter4/blob/develop/public/.htaccess

我建议您不要包含 SetEnv CI_ENVIRONMENT development 行 - 而是在您的 apache 或 NGinx .conf 文件中定义它,以便 .htaccess 文件可以在任何地方工作。

最后,您需要更新 .conf 文件,以便将 DOCUMENT_ROOT 设置为名为 public 的子文件夹(或您选择的任何名称)。然后重启 Apache/Nginx。

这应该会给你同样的结果,而且更安全。

-- 更新-- 我发现 CI 4 中的 .htaccess 文件有问题,但怀疑是我的系统出了问题。然而,这个简单的版本确实有效:

RewriteEngine on
RewriteCond $1 !^(index\.php|assets|images|js|css|uploads|favicon.png)
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$  ./index.php/$1 [L]

【讨论】:

    【解决方案2】:

    As per the CodeIgniter Installation Instructions...

    /var/application/
    /var/system/
    /var/www/index.php
    

    为获得最佳安全性,系统和任何应用程序文件夹都应置于 Web 根目录之上,以免通过浏览器直接访问它们。默认情况下,.htaccess 文件包含在每个文件夹中以帮助防止直接访问,但最好将它们完全从公共访问中删除,以防 Web 服务器配置发生更改或不遵守.htaccess。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-21
      • 2017-07-27
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      相关资源
      最近更新 更多