Codeigniter路由,意外的行为,不知道为什么

时间:2012-11-17 22:08:52

标签: php codeigniter routes

所以,我不知道在过去的几个网站上我和代码点火器做过多少次相似的事情。然而,只是给自己一个新的副本,并在一个新的网站上开始重建我已经遇到了一个我无法弄清楚的扭曲的小问题,我不知道我在这个等式中缺少什么..

所以这是我目前的路线:

$route['default_controller'] = "home";
$route['404_override'] = 'home/unknown';

$route['post/(:any)/(:any)'] = 'post/$1/$2';
//$route['post/(:any)'] = 'post/$1';
//$route['post'] = 'post';

$route['host-hotel'] = 'host_hotel';
$route['floor-plan'] = 'floor_plan';
$route['wine-facts'] = 'wine_facts';
$route['exhibitor-application'] = 'exhibitor_application';

$route['photo-gallery'] = 'photo_gallery';
$route['video-gallery'] = 'video_gallery';

现在问题出在这个家伙身上。

$route['post/(:any)/(:any)'] = 'post/$1/$2';

我甚至试过命名段文章而不是帖子,认为它可能是CI中受保护的名称。如果你注意到这一行,我也尝试添加URL的变量,这样它就可以处理第一段或者之后的一两段。授予它,在这个例子中它们被注释掉了,但没有用。

如果我转到domain.com/post,行为就像预期的那样。之后的任何事情都是问题的开始。如果我做了任何数字或字母或组合的那些..

ie:domain.com/post/s2hjdomain.com/post/s2hj/avd页面开始表现得像404行为一样,找不到哪个页面对我来说毫无意义,正如我所说的那样我过去做过这样的路线。对我来说这条路线看起来合适吗?所以任何人都有任何想法/建议寻找什么?

2 个答案:

答案 0 :(得分:2)

:any字面上匹配任何字符,包括斜杠。这将在CodeIgniter 3.0中更改,但目前您可以使用([^ /])来捕获单个段。

答案 1 :(得分:1)

尝试这种方法的另一种方法是通过Good ol'regexp:

$route['post/([^/]+)/([^/]+)'] = 'post/$1/$2';

如果您还需要能够处理总共2个uri段,请考虑:

$route['post/([^/]+)(?:/([^/]+))'] = 'post/$1/$2';

REGEXP解释:

()只是捕获并处理内部的字符串。另请在另一端为我们提供$1$2等。

(?:)与上述内容相同,但未捕获$1

[]是内部允许的组合。 [0-9]只会查找数字。

[^]是相反的逻辑。一切都超出了给定的标志。

除了[^/]之外,

/就是一切,从而为我们提供了理想的结果。