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

如何重写.htaccess文件以移除CodeIgniter URL中的index.php并强制HTTPS?

解决CodeIgniter URL中保留index.php的问题

我来帮你搞定这个问题!你的.htaccess主要是规则顺序和重复配置的小问题,调整一下就能同时实现「移除index.php」和「强制HTTPS」两个目标了。

修正后的.htaccess代码

<IfModule mod_rewrite.c>
    RewriteEngine On

    # 第一步:强制所有连接跳转到HTTPS
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # 第二步:移除URL中的index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

调整说明

  1. 合并重复配置:把原来两次出现的RewriteEngine On合并到一个<IfModule>块里,避免冗余和潜在冲突。
  2. 调整规则顺序:先强制HTTPS跳转,再处理index.php的移除——这样能确保所有请求先转到HTTPS,再执行URL美化,避免规则叠加导致的异常。

必须补充的CodeIgniter配置修改

光改.htaccess还不够,你需要同步修改框架的配置文件:

  • 打开application/config/config.php
  • 找到$config['index_page'] = 'index.php';这一行
  • 把它改成$config['index_page'] = '';

这一步是让CodeIgniter框架不再自动在URL中添加index.php,和.htaccess的规则配合才能生效。

额外注意事项

  • 确认你的Apache服务器已经开启了mod_rewrite模块
  • 确保网站根目录的Apache配置(虚拟主机或目录配置)中设置了AllowOverride All,否则.htaccess的规则不会被执行
  • 如果修改后还是有问题,可以尝试把移除index.php的规则改成:RewriteRule ^(.*)$ index.php?$1 [L](把斜杠换成问号),部分服务器环境需要这种写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:40:17