最近公司的新项目在做整合,几个频道原来是不同的域名不同的站点都是独立的文件夹,现在要公用Application目录和CI库目录等文件夹,为了便于管理与避免冲突,控制器controllers文件夹里各频道的控制器分别放在一个子目录里。为了让原来的访问地址一样有效,得重写.htaccess里的RewriteRule规则。
原来的规则:RewriteRule ^(.*)$ /index.php/$1 [L] #隐藏了index.php
控制器转移到了user目录里,由于我想当然地在规则里直接加上了user:
RewriteRule ^(.*)$ /index.php/user/$1 [L]
可是访问时出现了404错误,访问/index.php/user/controller这样的网址又是正常的。
经过解读CI代码,发现了造成这个问题的原因:非参数方式传递控制器名等信息时,获取URI数据是从当前链接获取的,而非重写后的,导致文件夹数据丢失。
后经CI交流群Hex提醒,在config/routes.php里设置了路由,解决了:
$route['(S+)']="user/$1";