代码点火器路由,意外行为,不知道为什么



所以,我不知道过去有多少次在少数网站上使用代码点火器进行类似的操作。然而,只是给自己一个新的副本,并在一个新网站上开始重建,我已经遇到了一个我无法解决的扭曲的小问题,我不知道我在这个等式中缺少了什么。。

所以这是我目前的路线:

$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,则行为与预期的一样。之后的任何事情都是问题的开始。如果我在那里做了任何数字、字母或组合。。

即:domain.com/post/s2hjdomain.com/post/s2hj/avd页面开始表现得像404行为,找不到页面,这对我来说毫无意义,因为我说过我过去也做过这样的路线。对我来说,这条路线看起来很合适吗?所以有人有什么想法/建议要找什么吗?

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

另一种尝试方法是通过Good ol’regexp:

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

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

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

REGEXP解释道:

()只是简单地捕获和处理里面的字符串。并给出了另一端的$1$2等。

(?:)与上述相同,但不捕获$1

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

CCD_ 12是相反的逻辑。一切都超出了给定的迹象。

[^/]就是/之外的一切,从而给了我们想要的结果。

相关内容