单独的CodeIgniter公用文件夹

noe*_*eat 0 php .htaccess codeigniter

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

- application
- system
- public
Run Code Online (Sandbox Code Playgroud)

它有效,但我必须输入

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

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

我该怎么做?

Oli*_*ams 6

对于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,而是在apin或NGinx .conf文件中定义该行,以便.htaccess文件可以在任何地方使用。

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

那应该给您相同的结果,并且更加安全。

-更新-我发现.htaccessCI 4中的文件有问题,但是怀疑是我的系统出了问题。这个简单的版本确实起作用了:

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]
Run Code Online (Sandbox Code Playgroud)