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

如何通过.htaccess将CodeIgniter站点URL转换为html后缀结构?

解决CodeIgniter站点URL转换的.htaccess配置方案

根据你的需求,需要实现新站点URL与旧版.html格式URL的转换,以下分两种常见场景给出配置方案,你可根据实际需求选择:


场景1:让旧版.htmlURL指向新站点内容

当用户访问旧格式URL(如www.mydomain.com/productname.html)时,内部重写到新站点的/lang/product/productname路由,用户地址栏保持旧URL不变:

在现有.htaccess的强制www规则之后,添加以下规则:

# 匹配旧版.html URL,内部重写到新路由
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)\.html$ /lang/product/$1 [L]

场景2:将新站点路由重定向为旧版.htmlURL

当用户访问新站点路由(如www.mydomain.com/lang/product/productname)时,浏览器地址栏301重定向到旧格式URL(利于SEO权重继承):

在现有.htaccess的强制www规则之后,添加以下规则:

# 将新路由301重定向到旧版.html URL(匹配两位语言码,如en/zh)
RewriteCond %{REQUEST_URI} ^/([a-z]{2})/product/([^/]+)$ [NC]
RewriteRule ^ /%2.html [R=301,L]

完整整合后的.htaccess代码

以场景1为例,整合后的完整配置如下:

RewriteEngine On

# 强制跳转到www域名
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# 场景1:旧.html URL重写到新路由(按需替换为场景2的规则)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)\.html$ /lang/product/$1 [L]

# 处理system目录请求
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]

# 非文件/目录的请求转发到index.php(CodeIgniter核心规则)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L]

# 移除URL尾部斜杠
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R]

注意事项

  • 规则顺序很重要:强制www的规则必须放在最前面,URL转换规则要放在CodeIgniter核心转发规则之前;
  • 如果你的语言码不是两位,需修改场景2规则中的([a-z]{2})为对应匹配规则;
  • 测试前建议先用R=302临时重定向验证,确认无误后再改为R=301永久重定向;
  • 确保服务器开启了mod_rewrite模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:09:09