Codeigniter3网站迁移后仅首页可访问,遇内部重定向超限错误
解决CodeIgniter3迁移后非Index方法404及重定向循环问题
问题分析
迁移后仅主控制器index方法可访问,其他方法返回404,是因为Apache未启用mod_rewrite或.htaccess未生效;修改AllowOverride All后出现500错误(重定向循环),是因为**.htaccess规则顺序错误、RewriteBase配置不当**,同时存在PHP配置路径不匹配的问题。
修复步骤
1. 先解决重定向循环,恢复站点访问
调整.htaccess的规则顺序,确保HTTPS重定向优先于URL重写,同时设置正确的RewriteBase,分两个实例处理:
对外站点(endUsers,URL隐藏文件夹)的.htaccess
将文件放在站点根目录(即public_html/endUsers下):
RewriteEngine On # 站点根目录设置RewriteBase为/ RewriteBase / # 强制HTTPS跳转(优先处理,避免循环) RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # CodeIgniter URL重写规则(去掉index.php) RewriteCond $1 !^(index\.php|resources|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L,QSA] # PHP处理器配置(根据新主机Webmill设置的PHP版本调整,比如ea-php73) <IfModule mime_module> AddHandler application/x-httpd-ea-php73 .php .php7 .phtml </IfModule> # PHP INI配置(移除或修改cPanel专属的session路径,改用新主机默认路径) <IfModule php7_module> php_flag display_errors Off php_value max_execution_time 30 php_value max_input_time 60 php_value max_input_vars 4000 php_value memory_limit 1024M php_value post_max_size 256M php_value session.gc_maxlifetime 1440 # 注释或删除cPanel专属的session.save_path,让系统自动处理 # php_value session.save_path "/var/cpanel/php/sessions/ea-php71" php_value upload_max_filesize 1024M php_flag zlib.output_compression Off </IfModule> <IfModule lsapi_module> php_flag display_errors Off php_value max_execution_time 30 php_value max_input_time 60 php_value max_input_vars 4000 php_value memory_limit 1024M php_value post_max_size 256M php_value session.gc_maxlifetime 1440 # 注释或删除cPanel专属的session路径 # php_value session.save_path "/var/cpanel/php/sessions/ea-php71" php_value upload_max_filesize 1024M php_flag zlib.output_compression Off </IfModule>
后台站点(admin)的.htaccess
将文件放在public_html/admin下:
RewriteEngine On # 后台路径的RewriteBase设为/admin/ RewriteBase /admin/ # 强制HTTPS跳转 RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}/admin/$1 [L,R=301] # CodeIgniter URL重写规则 RewriteCond $1 !^(index\.php|resources|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L,QSA] # PHP处理器配置(与对外站点一致) <IfModule mime_module> AddHandler application/x-httpd-ea-php73 .php .php7 .phtml </IfModule>
2. 确认Apache配置正确
- 启用mod_rewrite模块:
执行命令:sudo a2enmod rewrite sudo systemctl restart apache2 - 设置目录的
AllowOverride All:
找到站点的Apache配置文件(通常在/etc/apache2/sites-available/[your-site].conf),添加或修改以下目录配置:
修改后重启Apache:# 对外站点目录 <Directory /var/www/html/public_html/endUsers> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> # 后台站点目录 <Directory /var/www/html/public_html/admin> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>sudo systemctl restart apache2
3. 调整CodeIgniter配置文件
两个实例的application/config/config.php分别设置:
对外站点(endUsers)
$config['base_url'] = 'https://mywebsite.com/'; $config['index_page'] = ''; $config['uri_protocol'] = 'REQUEST_URI';
后台站点(admin)
$config['base_url'] = 'https://mywebsite.com/admin/'; $config['index_page'] = ''; $config['uri_protocol'] = 'REQUEST_URI';
4. 测试验证
- 访问首页:
https://mywebsite.com,确认正常加载 - 测试非index方法:
https://mywebsite.com/frontController/research - 测试后台路径:
https://mywebsite.com/admin/controller_name
内容的提问来源于stack exchange,提问作者fede72bari
相关产品推荐
相关产品推荐

