codeigniter 路由(URL) 优化分析与讲解
事前先说明白一点,使用CI开发生成地址应该100%用site_url()辅助函数和相关辅助函数实现,实在不行自己扩展url辅助函数.否则你会遇到或者可能遇到头疼的或潜在的问题. 还有一点要明白anchor() redirect() current_url()等url相关的函数都是通过调用site_url()实现的,也就是说site_url()是最底层的. 搞清楚这些可以阅读下文了. 例如: 要浏览某一篇文章地址很可能如下 http://codehere.net/code/view/81.html 其中code是控制器名称,view是控制器的方法,81是参数一般传递的是文章的ID. 现在要重写城 http://codehere.net/code_81.html 先说下基本原理,首先对地址重写,然后对重写的地址解析. 通过研究CI的源码发现地址生成全部使用url辅助函数site_url,所以从site_url下手 1。扩展原有的url辅助函数 在application目录的helper目录下建立X_url_helper.php (X_是前缀,取决于你的config配置),代码如下 /* * 调用rewrite的site_url */ if(!function_exists('site_url')) { functionsite_url($uri='') { if(function_exists('rewrite')){ $uri=rewrite($uri); } $CI=&get_instance(); return$CI->config->site_url($uri); } } //重写url,用于router中优化url //在url辅助函数site_url中调用 if(!function_exists('rewrite')) { functionrewrite($url){ $CI=&get_instance(); $CI->config->load('rewrite',TRUE); $rewrite=$CI->config->item('rewrite'); ksort($rewrite['pattern']); ksort($rewrite['replace']); $url=preg_replace($rewrite['pattern'],$rewrite['replace'],$url,1); return$url; } } 2。创建重写规则,在config目录下建立rewrite.php文件. /* * 在rewrite辅助函数中 */ $config['pattern']=array(); $config['replace']=array(); //查看code详细内容的 $config['pattern'][0]='/code/view//i'; $config['replace'][0]='code_'; //tags $config['pattern'][1]='/tags/index/(.+)/i'; $config['replace'][1]='tag_1'; 3。对重写的url解析,解析通过config目录下的routes.php实现. //查看code详细内容 $route['code_(:num)']="code/view/$1"; //tags $route['tag_(:any)']="tags/index/$1"; (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |