2012-09-09 80 views
0

我已经在routes.php上定义了一个新的路由,但它有问题。codeigniter路由问题的主要网址

$route['default_controller'] = "index"; 
$route['404_override'] = ''; 
$route['(:any)'] = "oyna/oyun/$1"; 

我想将/2012.htm重定向到oyna/oyun/2012.htm,但我可以创建一个新问题。我无法达到我的其他控制器,如果我不如下定义:

$route['default_controller'] = "index"; 
$route['404_override'] = ''; 
$route['admin/(:any)/(:any)'] = 'admin/$1/$2'; 
$route['admin/(:any)'] = 'admin/$1'; 
$route['kategori/(:any)'] = "oyna/kategori/$1"; 
$route['(:any)'] = "oyna/oyun/$1"; 

如果我没有定义在routes.php文件的任何控制器像上面我不能达到这一点。 我需要做什么来解决?

回答

2

我不知道,但尝试$route['(:num).htm'] = "oyna/oyun/$1.htm";

或更好更换$route['(:any)'] = "oyna/oyun/$1";$route['(\d+).htm'] = "oyna/oyun/$1.htm";

+0

但我需要使用(:任何)的搜索引擎优化。 – user1648692

0

CodeIgniter的路线是有点滑稽,但一旦你理解他们是如何处理的,它非常有意义。

由于路由使用正则表达式匹配,因此在路由到URL隐含的控制器/方法之前,它将查看路由,因此您不能只拥有超级通用的东西并期望其他所有工作。

如果你想匹配的网址,如http://domain.tld/2njkf4r和​​那么你将不得不创建更具体的规则来处理“例外”的一般规则,将匹配第一种情况。

你是正确的,除非你定义了其他路由,否则它将不起作用,因为只有$route['(:any)']作为路由,每个请求都会匹配该路由。这条路线必须是你绝对的最后路线。这是一个痛苦的屁股,但必要的,因为他们处理路线的方式。

+0

事实上,我有一个想法,如果“/”键入它意味着这不是/ oyna/oyun /。如果“/”没有输入,则表示这是控制器,不是吗? – user1648692

+0

我不确定我是否理解你的评论...你能改述吗? – Brendan

+0

我的oyna/oyun /的网址没有“/”键。如果“/”键入这意味着它是控制器。 :) – user1648692

0

我的所有链接都在.htm结尾。这是解决方案:

$route['(:any).htm'] = "oyna/oyun/$1"; 

因为我的控制器在最后没有得到.htm。