如何用.htaccess将HTTP/HTTPS域名重定向到HTTPS://www(CodeIgniter3)
解决CodeIgniter 3中不带WWW的HTTP/HTTPS域名重定向问题
你的规则失效核心是条件组合逻辑错误,原规则里的[OR]会导致部分场景下重定向异常。下面是修正后的完整规则,能覆盖所有需要跳转的场景:
RewriteEngine On # 统一重定向到https://www.mysite.co.bw/ RewriteCond %{HTTP_HOST} !^www\.mysite\.co\.bw$ [OR] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://www.mysite.co.bw/$1 [R=301,L,NE] # CodeIgniter原生URL重写规则 RewriteCond $1 !^(index\.php|assets|images|js|css|uploads|favicon\.png) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
关键修正说明:
- 调整条件逻辑:把原规则的
^mysite\.co\.bw$改为!^www\.mysite\.co\.bw$,配合[OR]实现:只要域名不是带www的,或者HTTPS未开启,就触发重定向,覆盖http://mysite.co.bw/、https://mysite.co.bw/、http://www.mysite.co.bw/三种需要跳转的情况。 - 添加
NE标记:避免URL中的特殊字符被转义,保证参数传递准确。 - 简化CI规则路径:将
./index.php/$1改为index.php/$1,适配部分服务器的路径解析逻辑。
额外注意事项:
- 确保CodeIgniter配置文件
application/config/config.php中,$config['base_url']设为https://www.mysite.co.bw/,$config['index_page']留空。 - 服务器需启用
mod_rewrite模块,且.htaccess文件放在CI项目根目录(与index.php同级)。 - 测试前清空浏览器缓存,301重定向会被浏览器缓存,之前的错误规则可能残留影响测试结果。
内容的提问来源于stack exchange,提问作者Yadhu Babu
相关产品推荐
相关产品推荐

