所以,我不知道我在过去的几个网站上做过多少次类似的代码点火程序。然而,只是给自己一个新的拷贝,并在一个新的网站上开始重建,我已经遇到了一个扭曲的小问题,我不知道我在这个等式中遗漏了什么。
这就是我目前的路线:
$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/s2hj或domain.com/post/s2hj/avd页面开始像404行为一样,页面找不到对我来说没有任何意义,因为我说过我过去也做过这样的路由。我觉得这条路合适吗?那么,有没有人有任何想法/建议去寻找什么?
发布于 2012-11-18 06:32:11
:any从字面上匹配任何字符,包括斜杠。这将在CodeIgniter 3.0中更改,但目前您可以使用(^/)来捕获单个片段。
发布于 2012-11-18 19:48:08
另一种尝试方法是通过Good ol‘regexp:
$route['post/([^/]+)/([^/]+)'] = 'post/$1/$2';如果您还需要能够处理总共2个uri段,请考虑:
$route['post/([^/]+)(?:/([^/]+))'] = 'post/$1/$2';解释的REGEXP:
()只是简单地捕获和处理内部的字符串。还可以在另一端提供$1、$2等。
(?:)与上面相同,但不能捕获$1
[]是允许的内部对象组合。[0-9]将只查找数字。
[^]是相反的逻辑。除了给定的星座外,一切都是如此。
[^/]是除了/之外的所有东西,因此给了我们想要的结果。
https://stackoverflow.com/questions/13435253
复制相似问题