Codeigniter路由正则表达式

时间:2012-10-03 01:31:41

标签: regex codeigniter routing

我有一个拥有多种语言的网站。对于我的新闻页面,我有两个规则将分页变量路由到我的控制器。一个用于所有语言(en,ct,cs,kr),另一个用于默认语言。

routes.php文件

$route['^(en|ct|cs|kr)/news/page/(:num)'] = 'news/index/$1';
$route['news/page/(:num)'] = 'news/index/$1';

新闻控制器

public function index($id) 
{
   echo $id; 
}

路由正在访问新闻控制器,但$id参数未传递给index()方法。

如果我回显$id它返回语言段而不是我期望的分页变量:

  

mysite.com/en/news/page/2 // $ id返回'en'。
  mysite.com/kr/news/page/2 // $ id返回'kr'。

当我为每种语言单独写出路线时,它会起作用:

  

$ route ['en / news / page /(:num)'] ='news / index / $ 1';

我的正则表达式出错了吗?

1 个答案:

答案 0 :(得分:2)

这是因为在您的第一条规则中,您正在捕获网址的两个部分。第一个是语言(例如en),第二个是id(或页码)。因此,在您的第一条规则中,您应该使用$2而不是$1

$route['^(en|ct|cs|kr)/news/page/(:num)'] = 'news/index/$2';