1

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

所以这是我目前的路线:

$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 行为,找不到页面,这对我来说毫无意义,正如我所说,我过去做过这样的路线。对我来说,这条路线看起来合适吗?所以有人有任何想法/建议要寻找什么吗?

4

2 回答 2

2

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

于 2012-11-17T22:32:11.150 回答
1

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

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

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

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

正则表达式解释:

()简单地捕获和处理里面的字符串。在另一端也给了我们$1,等等。$2

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

[]是里面允许的东西组合。[0-9]只会寻找数字。

[^]是颠倒的逻辑。一切除了给定的迹象。

[^/]是除了 之外的一切/,因此给了我们想要的结果。

于 2012-11-18T11:48:07.630 回答