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

CodeIgniter强制HTTPS后URL仍带index.php?/问题求助

解决HTTP跳转HTTPS后URL末尾带index.php?/的问题

嘿,这个问题我之前碰到好多次了,大概率是你的.htaccess重写规则顺序不对,加上CodeIgniter的URL配置没跟上导致的,咱们一步步来搞定它:

1. 调整.htaccess的重写规则顺序

很多人会把HTTPS跳转和index.php隐藏的规则写反,或者规则里的路径拼接有问题,导致跳转时额外带上了index.php。你可以替换成下面这个规则:

RewriteEngine On

# 第一步:强制所有HTTP请求跳转到HTTPS,保留原始请求路径
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 第二步:处理CodeIgniter的index.php隐藏
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

这里关键是先做HTTPS跳转,用%{REQUEST_URI}完整保留用户请求的原始路径,避免手动拼接时出错;之后再处理CI的URL重写,把index.php隐藏掉。

2. 修正CodeIgniter的核心配置

打开application/config/config.php,检查以下两个配置:

  • base_url:确保它指向正确的HTTPS地址,要么直接写死(推荐,避免服务器变量异常),要么完善动态判断逻辑:
    // 方案一:固定HTTPS地址(更稳定)
    $config['base_url'] = 'https://www.my-site.com/';
    
    // 方案二:动态判断(适合多环境部署)
    $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http';
    $config['base_url'] = $protocol . '://' . $_SERVER['HTTP_HOST'] . '/';
    
  • index_page:必须设为空字符串,这是CI隐藏index.php的关键:
    $config['index_page'] = '';
    

另外,你可以检查下$config['uri_protocol'],建议设置为'REQUEST_URI'或者'AUTO',避免URI解析错误导致额外的参数出现。

3. 清除缓存测试

因为之前的错误301跳转可能已经被浏览器或者服务器缓存了,所以:

  • 用浏览器的隐私模式打开网站测试,或者手动清除浏览器缓存;
  • 如果你的网站用了CDN、Apache/Nginx缓存,记得清空这些缓存,确保新规则生效。

按照上面的步骤操作后,HTTP跳转HTTPS应该就不会再带多余的index.php?/了,URL会保持干净美观。

内容的提问来源于stack exchange,提问作者Kenny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:19