
本文详细讲解如何在 CodeIgniter 项目中正确配置 .htaccess 强制启用 HTTPS,避免 URL 重写冲突、页面加载失败等问题,并同步调整框架配置以确保资源链接和会话安全。
本文详细讲解如何在 codeigniter 项目中正确配置 `.htaccess` 强制启用 https,避免 url 重写冲突、页面加载失败等问题,并同步调整框架配置以确保资源链接和会话安全。
在生产环境中强制使用 HTTPS 不仅是安全合规要求(如 GDPR、PCI-DSS),更是提升 SEO 排名与用户信任的关键措施。对于基于 CodeIgniter 的应用,仅靠框架配置无法真正实现全站 HTTPS 重定向——必须结合 Apache 的 mod_rewrite 在服务器层完成协议跳转,同时确保 CodeIgniter 自身生成的 URL 和会话行为与 HTTPS 保持一致。
✅ 正确的 .htaccess HTTPS 强制重定向配置
将以下规则置于项目根目录的 .htaccess 文件顶部(务必放在其他重写规则之前):
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# 第一步:强制 HTTPS(推荐优先执行)
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 第二步:可选 — 同时统一 www 前缀(若需)
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 第三步:CodeIgniter 路由转发(保持原有逻辑)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
</ifmodule>
? 关键说明:
- RewriteBase / 表示 CodeIgniter 部署在域名根路径(如 https://example.com/)。若部署在子目录(如 /ci-app/),请改为 RewriteBase /ci-app/;
- R=301 表示永久重定向,有利于搜索引擎索引更新;调试阶段可用 R=302 临时跳转;
- ^(.*)$ 比 (.+) 更健壮,能匹配空路径(如首页 /),避免重定向丢失;
- HTTPS 检测使用 %{HTTPS} off(而非依赖 $_SERVER['HTTPS']),更可靠且兼容各类代理环境。
⚠️ CodeIgniter 框架层适配要点
.htaccess 仅解决请求跳转,还需同步调整 CodeIgniter 配置,防止混合内容(Mixed Content)警告及会话异常:
-
启用 cookie_secure(关键!)
在 application/config/config.php 中设置:$config['cookie_secure'] = TRUE; // 确保 Cookie 仅通过 HTTPS 传输 $config['sess_cookie_name'] = 'ci_session'; $config['sess_driver'] = 'database'; // 若使用数据库 session,请确认表结构支持 secure 标志
-
动态生成 base_url(推荐)
原配置中手动拼接 URL 易出错,建议简化并增强 HTTPS 感知:$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? 'https' : 'http'; $config['base_url'] = $protocol . '://' . $_SERVER['HTTP_HOST'] . '/';
✅ 优势:自动适配 HTTP/HTTPS,无需硬编码;配合 RewriteBase 可省略路径拼接逻辑。
验证 uri_protocol 设置
确保 $config['uri_protocol'] = 'REQUEST_URI';(默认值),避免因重写导致路由解析失败。
? 验证与常见问题排查
- 测试方法:直接访问 http://yoursite.com,应 301 跳转至 https://yoursite.com,且所有静态资源(CSS/JS/图片)URL 均为 https:// 开头;
-
典型错误:
- 页面空白或无限重定向 → 检查 RewriteBase 是否与实际部署路径匹配;
- 登录后跳回 HTTP → 忘记启用 cookie_secure = TRUE 或 session 驱动未适配;
- 图片/样式失效 → 浏览器控制台查看“Mixed Content”警告,确认 base_url 输出为 HTTPS;
- 进阶建议:在 Nginx 环境下,请改用 return 301 https://$host$request_uri; 替代 Apache 规则。
通过以上配置,即可在不修改业务代码的前提下,安全、稳定、兼容地实现 CodeIgniter 全站 HTTPS 强制化,兼顾 SEO 友好性与用户数据安全。











