CodeIgniter 3部署GoDaddy后默认路由失效,需指定控制器访问
GoDaddy虚拟主机部署CodeIgniter 3路由问题解决
问题描述
网站部署在GoDaddy虚拟主机,采用CodeIgniter 3框架,遇到以下问题:
- 直接访问域名
greenvaleschool.in无法打开,仅能通过greenvaleschool.in/home正常访问; routes.php配置未生效,必须指定完整控制器和方法名才能访问,例如需访问greenvaleschool.in/home/gallery。
已调整大小写问题,当前配置如下:
routes.php 配置
$route['default_controller'] = 'Home';
.htaccess 配置
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule>
解决方案
1. 修正CodeIgniter核心配置
打开application/config/config.php,调整以下两项:
- 设置正确的
base_url:$config['base_url'] = 'https://greenvaleschool.in/'; - 清空
index_page,移除URL中的index.php:$config['index_page'] = '';
2. 适配GoDaddy环境修改.htaccess
GoDaddy的Apache环境对Rewrite规则有特殊要求,替换现有.htaccess为以下内容(两种写法可分别测试):
写法一(添加默认控制器跳转规则)
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 根域名直接跳转到Home控制器 RewriteRule ^$ index.php?/Home [L] # 处理非文件/目录的路由请求 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule>
写法二(简化Rewrite规则)
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule>
3. 确认控制器文件与类名规范
CodeIgniter 3对控制器命名严格区分大小写:
- 控制器文件名需首字母大写,例如
Home.php; - 类名必须与文件名一致,首字母大写:
class Home extends CI_Controller { public function index() { // 默认方法逻辑 } }
4. 启用GoDaddy主机的mod_rewrite模块
登录GoDaddy主机控制面板,在“主机设置”或“Apache配置”中确认mod_rewrite已启用;若找不到相关选项,可联系GoDaddy客服协助开启。
5. 清除CodeIgniter缓存
删除application/cache目录下的所有文件,避免缓存导致配置未生效。
内容的提问来源于stack exchange,提问作者Shardul Mishra
相关产品推荐
相关产品推荐

