单独的CodeIgniter公用文件夹

时间:2016-06-23 01:50:22

标签: php .htaccess codeigniter

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

- application
- system
- public

它有效,但我必须输入

  

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

我希望能够像example.com/controller一样输入基本URL。

我该怎么做?

2 个答案:

答案 0 :(得分:6)

对于CodeIgniter 3.x,正确的方法(2018年及之后)如下:

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

    $system_path更改为../system

    $application_folder更改为../application

现在,我们需要一个.htaccess文件,但CI 3.x默认情况下没有.htaccess文件,soo ..如何从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]

答案 1 :(得分:0)

As per the CodeIgniter Installation Instructions ...

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

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