CodeIgniter 3.0如何实现URL不变的后台跳转?
解决方案
1. 修改.htaccess配置(核心调整)
你当前的规则用了R=301触发外部跳转,导致地址栏变化。需要改成服务器内部重写,去掉跳转标志,让请求在后台处理,不改变浏览器地址栏:
替换原有a.com相关规则为:
# 针对a.com的请求,内部转发到i/路径处理 RewriteCond %{HTTP_HOST} ^a\.com$ RewriteRule ^(.*)$ /i/$1 [L]
- 说明:
[L]表示匹配后停止后续规则;去掉R=301就不会向浏览器返回跳转指令,地址栏将始终显示a.com开头的URL。 - 若CodeIgniter部署在服务器子目录(如
/ci),需调整重写目标为/ci/i/$1。
2. 保留现有CodeIgniter路由规则
你的现有路由已经能覆盖所有分段场景,无需修改:
$route['i/(:any)'] = 'i/index/'; $route['i/(:any)/board/(:any)'] = 'i/index';
内部重写后的请求会自动匹配这些规则,转发到I.php的index方法,你可以通过$this->uri->segment(2)获取abc/test这类分段值。
3. 效果验证
- 访问
a.com/abc:服务器后台按i/abc逻辑处理,地址栏保持a.com/abc不变; - 访问
b.com/i/test:直接走原有路由逻辑,地址栏正常显示b.com/i/test。
注意事项
- 确保服务器已开启
mod_rewrite模块; - 虚拟主机配置需设置
AllowOverride All,允许.htaccess生效; - 后续新增任意分段,无需修改配置,
(:any)会自动匹配所有路径。
内容的提问来源于stack exchange,提问作者김동원
相关产品推荐
相关产品推荐

