尝试改进我创建的自定义codeigniter路由正则表达式。本质上,自定义路由的目的是为客户端配置文件页面创建一个更清晰/更短的URL,其格式为clients/client-slug
,例如:clients/acme-inc
。我只希望这条路线匹配,如果它们在客户端段塞段之后没有其他段,并且它们的客户端段塞值与任何与“客户端”控制器中的实际方法/路由相对应的“保留”值都不匹配。目前,这就是我正在使用的:
$route['clients/(?!some_method|another_method|foo|bar)(.+)'] = 'clients/index/$1';
除了当一个客户端slug以一个保留方法文本开头,即clients/food-co
,因为它有clients/foo
,自定义路由是不匹配。所以我需要基本上有条件地允许路由包含该集合中的任何保留方法,如果它后跟其他字符(不是/
)。
答案 0 :(得分:2)
你试试这个吗?
$route['clients/(?!(?:some_method|another_method|foo|bar)(?:/|$))(.+)'] = 'clients/index/$1';
答案 1 :(得分:0)
您将来应该考虑使用_remap()
方法。它允许您更新控制器并添加新方法而无需更新路由(只要您的URI与控制器名称匹配,您实际上根本不需要路由)。