子目录安装CodeIgniter出现404错误:双CI实例部署问题求助
嘿,我来帮你解决这个子目录下CodeIgniter实例的404问题!这种多实例部署的场景我处理过好多次,大概率是配置或者服务器重写规则没到位,咱们一步步来排查:
1. 检查子文件夹的CodeIgniter核心配置
首先得确保子目录里的CI实例自身配置没问题:
- 修改
application/config/config.php:- 把
$config['base_url']设为子目录的完整路径,比如你的子文件夹叫ci-sub,那就要写成http://yourdomain.com/ci-sub/(注意末尾一定要加斜杠,不然会导致资源路径错误) - 确认
$config['index_page']的值是空字符串'',这是为了让URL重写能去掉index.php后缀
- 把
- 检查
application/config/routes.php:
确保默认控制器的设置是正确的,比如$route['default_controller'] = 'Welcome';,要保证这个控制器文件存在于application/controllers/目录下,并且类名是首字母大写的(比如class Welcome extends CI_Controller)
2. 配置子文件夹专属的.htaccess文件
根目录的.htaccess规则不会自动作用于子目录,所以你需要在子文件夹里新建一个自己的.htaccess文件,内容如下:
RewriteEngine On # 排除实际存在的文件和目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 把请求转发到index.php RewriteRule ^(.*)$ index.php/$1 [L]
如果是Apache服务器,还要确保服务器允许这个子目录使用.htoverride,不然规则不会生效。
3. 调整服务器的重写规则(Apache/Nginx)
这一步是关键,不同服务器的配置方式不一样:
- Apache用户:
打开你的虚拟主机配置文件(比如/etc/apache2/sites-available/yourdomain.conf),找到对应子目录的Directory块,确保里面有AllowOverride All的设置,示例如下:
修改完成后,记得重启Apache服务:<Directory /var/www/html/ci-sub> AllowOverride All Require all granted </Directory>sudo systemctl restart apache2 - Nginx用户:
在你的Nginx虚拟主机配置的server块里,添加针对子目录的重写规则:
保存配置后重启Nginx:location /ci-sub { try_files $uri $uri/ /ci-sub/index.php?$args; }sudo systemctl restart nginx
4. 验证文件权限是否正确
有时候权限问题也会导致404或者访问被拒绝:
- 把整个子文件夹的目录权限设为755:
chmod -R 755 /path/to/ci-sub - 把所有文件的权限设为644:
chmod -R 644 /path/to/ci-sub/* - 特别要确保服务器运行用户(比如
www-data)对application/cache和application/logs目录有读写权限,不然CI可能无法正常运行
5. 做个基础测试定位问题
先直接访问子目录的index.php,比如http://yourdomain.com/ci-sub/index.php:
- 如果这个地址能正常打开,说明问题出在URL重写规则上,回到步骤2和3再检查一遍
- 如果还是404,那可能是服务器没有正确指向子文件夹,或者文件路径配置错误,需要确认子文件夹的文件是否完整,服务器根目录的路径设置是否正确
内容的提问来源于stack exchange,提问作者Roshan Lal
相关产品推荐
相关产品推荐

