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' 之外的任何字符串的主要内容,如果未能解决你的问题,请参考以下文章