如果我喜欢这样,那么每个控制器都映射到这条路线:“polica / ogled / parameter”.不行:
$route["(:any)"] = "polica/ogled/$1";
这有效,但我总是在routes.PHP中手动输入信息:
$route["username1"] = "polica/ogled/username1";
我如何做到这一点,这将自动化?
更新:
例如,我有控制器名称广告.例如,如果您访问www.example.com/ads/
会有列出的广告.如果您访问www.example.com/username1,则会按用户username1列出广告.还有控制器用户,个人资料,最新,……
我的当前routes.PHP:
$route['oglasi'] = 'oglasi'; $route['(:any)'] = "polica/ogled/$1" $route['default_controller'] = 'domov'; $route['404_override'] = '';
$route['oglasi/(:any)'] = 'oglasi/$1'; $route['(:any)'] = "polica/ogled/$1" $route['default_controller'] = 'domov'; $route['404_override'] = '';
此致,马里奥
我想你可能有两个解决方案:
1)您可以选择性地重新路由所有站点控制器,例如:
$route['aboutus'] = "aboutus"; $route['where-we-are'] = "whereweare"; //And do this for all your site's controllers //Finally: $route['(:any)'] = "polica/ogled/$1";
所有这些路线必须在任何之前出现,因为它们按照它们出现的顺序被读取,并且如果你放置:任何在开头它将很乐意跳过所有其余的路线.
评论后编辑:
我的意思是,如果您要与任何段匹配,这意味着您根本不能使用任何控制器(默认情况下,这是第一个URI段),因为路由器将始终使用您的路由器重新路由您定义的法律.
为了允许CI执行其他控制器(无论它们是什么,我只是使用了一些常见的网页,但实际上可以是一切),您需要通过将它们从重新路由中排除来允许它们.你可以通过在任何规则之前放置它们来实现这一点,这样每次CI通过你的路由规则时,它首先解析你“转义”的那个,并且只有当它们与URL上找到的任何内容不匹配时,它才会传递给它到:任何规则.
我知道这仍然是代码冗长,但正如你所说,它们肯定会低于6K.
由于我不知道您的URL和Web应用程序的实际结构,因此它是我想到的唯一解决方案.如果您提供更多信息,例如如何塑造您应用的常规网址,那么我可以更新我的答案
/结束编辑
这不是一个实用的解决方案,因为它需要大量的代码,但是如果你想要这样的设计,这是我想到的唯一方法.
此外,考虑你可以使用正则表达式作为$route索引,但我不认为它可以在这里工作,因为你的用户名不太可能以这种方式匹配,但我只想指出可能性.
要么
2)你可以稍微改变你的设计模式,并为用户名分配另一条路线,这是一条沿线的
$route['user/(:any)'] = "polica/ogled/$1";
这将产生相当漂亮(和语义)的URL,并且将避免逃避其他路由的所有麻烦.