0

我在 routes.php 上定义了一条新路线,但它有问题。

$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 上定义任何控制器,我就无法做到这一点。我需要做什么来解决?

4

3 回答 3

2

I'm not sure, but try to replace $route['(:any)'] = "oyna/oyun/$1"; with $route['(:num).htm'] = "oyna/oyun/$1.htm";

Or better: $route['(\d+).htm'] = "oyna/oyun/$1.htm";

于 2012-09-09T15:29:43.583 回答
0

CodeIgniter 的路由有点搞笑,但是一旦你了解了它们是如何处理的,它就很有意义了。

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

如果要匹配诸如http://domain.tld/2njkf4rAND之类的 URL,http://domain.tld/pages/about则必须创建更具体的规则来处理匹配第一种情况的非常一般规则的“例外”。

您是正确的,除非您定义其他路线,否则它不会起作用,因为仅$route['(:any)']作为路线,每个请求都会匹配。那条路线必须是您绝对的最后一条路线。由于他们处理路由的方式,这很麻烦,但很有必要。

于 2012-09-09T17:30:31.497 回答
0

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

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

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

于 2012-09-09T18:43:19.117 回答