【问题标题】:Codeigniter Routing RegexCodeigniter 路由正则表达式
【发布时间】:2012-09-23 22:14:27
【问题描述】:

我有一个包含多种语言的网站。对于我的新闻页面,我有两条规则将分页变量路由到我的控制器。一种用于所有语言(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';

我的正则表达式有问题吗?

【问题讨论】:

    标签: regex codeigniter routing


    【解决方案1】:

    这是因为在您的第一条规则中,您要捕获 URL 的 2 段。第一个是语言(例如en),第二个是id(或页码)。因此,在您的第一条规则中,您应该改用$2 而不是$1

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

    【讨论】:

    • 完美!这确实有道理。非常感谢。
    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 2012-06-28
    • 2010-12-30
    • 2013-05-07
    • 2012-08-08
    • 1970-01-01
    • 2011-01-24
    相关资源
    最近更新 更多