You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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),添加或修改以下目录配置:
    # 对外站点目录
    <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>
    
    修改后重启Apache: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:17:57