用户
 找回密码
 入住 CI 中国社区
搜索
查看: 12037|回复: 7
收起左侧

[其它 Other] codeigniter 路由(URL)终极优化

  [复制链接]
发表于 2010-7-27 10:17:14 | 显示全部楼层 |阅读模式
本帖最后由 ares333 于 2010-12-9 17:35 编辑

看样子很有必要发个帖子了,URL格式是如此的重要
转自这里,可以看一下原文.
http://codehere.net/codeigniter-url.html

事前先说明白一点,使用CI开发生成地址应该100%用site_url()辅助函数和相关辅助函数实现,实在不行自己扩展url辅助函数.否则你会遇到或者可能遇到头疼的或潜在的问题.
还有一点要明白anchor() redirect() current_url()等url相关的函数都是通过调用site_url()实现的,也就是说site_url()是最底层的.
搞清楚这些可以阅读下文了.
CI版本 1.7.2
例如:
要浏览某一篇文章地址很可能如下
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配置),代码如下
PHP复制代码
  /*
 * 调用rewrite的site_url
 */

if ( ! function_exists('site_url'))
{
 function site_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'))
{
 function rewrite($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文件.
PHP复制代码
  <?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实现.
PHP复制代码
  //查看code详细内容
$route['code_(:num)']="code/view/$1";
//tags
$route['tag_(:any)']="tags/index/$1";
复制代码

转自http://codehere.net/codeigniter-url.html
发表于 2010-7-27 15:13:34 | 显示全部楼层
很不错,支持原创,希望楼主继续分享好文章
发表于 2011-4-11 10:56:16 | 显示全部楼层
受教了 ,  很有帮助 ,谢谢
发表于 2012-11-15 21:11:17 | 显示全部楼层
学习
发表于 2012-12-30 13:08:34 | 显示全部楼层
mark  收藏。以后备用 。
发表于 2012-12-31 01:40:15 | 显示全部楼层
{:soso_e142:}相当不错啊~~
发表于 2013-1-21 11:31:04 | 显示全部楼层
很不错。
发表于 2013-3-25 22:52:30 | 显示全部楼层
mark一下

本版积分规则