Codeigniter 路由正则表达式 - 匹配除 'admin' 之外的任何字符串

Posted

技术标签:

【中文标题】Codeigniter 路由正则表达式 - 匹配除 \'admin\' 之外的任何字符串【英文标题】:Codeigniter route regex - match any string except 'admin'Codeigniter 路由正则表达式 - 匹配除 'admin' 之外的任何字符串 【发布时间】:2012-03-14 19:34:30 【问题描述】:

我想将任何与管理员路由不匹配的路由发送到我的“事件”控制器。这似乎是一个相当普遍的要求,粗略的搜索会抛出各种similarquestions。

据我了解,该解决方案似乎是在正则表达式中使用负前瞻。所以我的尝试看起来像这样:

$route['(?!admin).*'] = "event";

..这行得通。嗯,有点。它确实向我的“事件”控制器发送任何非管理员请求,但我需要它传递匹配的实际字符串:所以 /my-new-event/ 被路由到 /事件/我的新事件/

我试过了:

$route['(?!admin).*'] = "event/$0";
$route['(?!admin).*'] = "event/$1";
$route['(?!admin)(.*)'] = "event/$0";
$route['(?!admin)(.*)'] = "event/$1";

...以及其他一些越来越随机和绝望的排列。所有结果都会导致 404 页面。

将匹配的字符串传递给控制器​​的正确语法是什么?

谢谢:)

【问题讨论】:

【参考方案1】:

我认为你不能做“负路由”。

但是由于路线确实有一个顺序:“路线将按照它们定义的顺序运行。较高的路线将始终优先于较低的路线。”我会先做我的管理员,然后再做其他事情。

如果我认为您的管理路径看起来像“/admin/...”,我会建议:

$route['admin/(:any)'] = "admincontroller/$1";
$route['(:any)'] = "event/$1";

【讨论】:

确实有效,谢谢。奇怪的是,否定匹配不会传递匹配的字符串,但这可以很好地解决问题。

以上是关于Codeigniter 路由正则表达式 - 匹配除 'admin' 之外的任何字符串的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:匹配除“<”、“”和“%”之外的任何内容

什么正则表达式将匹配除逗号','或分号';'之外的每个字符?

正则表达式匹配除 5 之外的所有数字字符

正则表达式匹配除一个以外的所有网站

正则表达式:匹配除一个单词之外的所有内容[重复]

正则表达式:匹配除特定模式之外的所有内容