codeigniter为主url路由问题


codeigniter routes issue for main url

我在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上定义任何控制器,我就无法访问它。我需要做些什么来解决?

我不确定,但尝试用$route['(:num).htm'] = "oyna/oyun/$1.htm"; 替换$route['(:any)'] = "oyna/oyun/$1";

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

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

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

如果要匹配http://domain.tld/2njkf4rhttp://domain.tld/pages/about等URL,则必须创建更具体的规则来处理与第一种情况匹配的非常通用的规则的"异常"。

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

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

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

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