【问题标题】: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 页面。

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

谢谢:)

【问题讨论】:

    标签: regex codeigniter routes


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 确实有效,谢谢。奇怪的是,否定匹配不会传递匹配的字符串,但这可以很好地解决问题。
    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多