首页 > 解决方案 > Codeigniter3 在服务器部署后给出 404(不读取应用程序文件夹)

问题描述

看到了关于这个主题的几个问题,而且似乎都与 .htaccess 相关 - 我在下面粘贴了我的问题。

.htaccess(存储在根 web 文件夹中,在应用程序之上):

<IfModule mod_rewrite.c>
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]
</IfModule>

CodeIgniter 配置:

$config['base_url']    = 'https://'.$_SERVER['HTTP_HOST'].'/';
$config['index_page'] = 'index.php';
$config['uri_protocol'] = 'REQUEST_URI';

SSL 证书安装正确且测试良好。还使用 base_url 交换到 http 进行了测试,并为端口 80 设置了 vhost。通配符证书还在没有 codeigniter 的不同子域上进行了测试,按预期工作。

所有返回 404 错误的页面。Apache 访问日志显示不正确的端点被命中;

阿帕奇错误日志:

[core:info] [pid 26683] [client xxxx:53318] AH00128:文件不存在:/var/www/mysite/Account/login

这是不正确的端点 - 这应该是点击 /Application/Account/login 来加载 Account 控制器。这只发生在当前的服务器设置上(标准 LAMP 堆栈上的 Ubuntu 16.04)。

但是,如果我将虚拟主机设置为从 Application 文件夹开始,这显然会导致我丢失 .htaccess、资产、图像等。有人知道为什么 CI 似乎在根目录下寻找控制器吗?

标签: phpcodeigniter

解决方案


确保您的虚拟主机设置正确。错别字对虚拟主机有重大影响,并且控制器的完全错误的位置路径可能表明存在虚拟主机设置问题。

您可以通过在浏览器地址中包含 index.php 来确认 .htaccess 是否正常工作,例如

example.com/index.php/account/login

如果这有效,但当你离开时它没有,index.php那么要么mod_rewrite不是“开启”,要么你的虚拟主机被搞砸了。


推荐阅读