【问题标题】:Custom CodeIgniter route regex自定义 CodeIgniter 路由正则表达式
【发布时间】:2013-05-07 18:11:42
【问题描述】:

尝试改进我创建的自定义 codeigniter 路由正则表达式。本质上,自定义路由的目的是为格式为clients/client-slug 的客户端配置文件页面创建一个更简洁/更短的 URL,例如:clients/acme-inc。我只希望这条路由匹配,如果它们在 client-slug 段之后没有额外的段,并且如果它们的 client-slug 值不匹配与客户端控制器中的实际方法/路由相对应的任何“保留”值。目前,这是我正在使用的:

$route['clients/(?!some_method|another_method|foo|bar)(.+)'] = 'clients/index/$1';

这几乎可以正常工作,除非有一个以保留方法文本之一开头的 client-slug,即clients/food-co,因为其中包含clients/foo,因此自定义路由不匹配。所以我需要基本上有条件地允许路由包含该集合中的任何保留方法,前提是它后面跟着其他字符(不是/)。

【问题讨论】:

    标签: regex codeigniter routes clean-urls


    【解决方案1】:

    你试试这个?

    $route['clients/(?!(?:some_method|another_method|foo|bar)(?:/|$))(.+)'] = 'clients/index/$1';
    

    【讨论】:

    • 我刚刚尝试了这个解决方案,但它似乎不起作用,因为客户端 slug 可以包含破折号,这是一个非单词字符,因此,例如 clients/foo-inc 不会匹配路由时应该是的。
    • @BillDami:我会用 /|$ 代替。
    • 这似乎与我迄今为止测试过的网址一起工作,谢谢!
    【解决方案2】:

    您以后应该考虑使用_remap() 方法。它将允许您更新您的控制器并添加新方法,而无需更新您的路由(实际上您根本不需要路由,只要您的 URI 与控制器名称匹配)。

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 2012-09-23
      • 1970-01-01
      • 2012-06-28
      • 2010-12-30
      • 2012-08-08
      • 1970-01-01
      • 2011-01-24
      相关资源
      最近更新 更多