自定义网址
我已经叫控制器“项目”与指数自定义网址
我想的方法传递PROJECT_ID 它的工作原理与此网址: 网址:http://example.com/project/index/project_id
什么,我试图做的是有网址为每个项目 http://example.com/project_id
例如: http://example.com/rickyboby
我想这个代码 $route['(:any)'] = "project/index/$1";
它的工作,我可以从url www.example.com/project_id访问project_id,但问题是我有其他控制器现在不工作,例如我有欢迎控制器,网址:www.example.com/welcome/是路由我到项目页面,我该如何解决?
您需要将“any”规则前的所有控制器列入白名单,因为它们按顺序排列(因此在您的示例中,/welcome
会将您带到project/index/welcome
)。例如:
$route['welcome'] = "welcome";
$route['somethingElse'] = "someOtherUrl";
$route['(:any)'] = "project/index/$1";
你也可以试着想用正则表达式这样做的聪明的方式,但我认为你是一个白名单更好。
这是一个基本的编程概念,这里大概不属于,但你总是可以这样做:
$controllers = array('welcome', 'otherController', 'etc');
foreach($controllers as $c) {
$route[$c] = $c; // make all URLs from the list go to their same-named controllers
}
$route['(:any)'] = "project/index/$1"; // handle the other URLs
一两件事 - 不要忘记,以防止用户从项目名称匹配现有的控制器名称(如welcome
),因为他们的项目将无法访问!在那里,还有另一个原因让该控制器列表在某处...
在“项目”路由规则之前放置“welcome”路由规则。这样系统将迎合欢迎,不会去寻找下一个规则。或者,您可以使用(:num)而不是(:any),这样它将只匹配数字(如果您的项目ID是数字)。
我的项目ID是一个字符串,我应该为每个控制器添加一个路由吗?没有办法检测url之后的字符串是否与控制器名称相匹配,以显示它是否路由到我的项目控制器? – Kamal 2014-10-06 19:55:26
https://ellislab.com/codeigniter/user-guide/general/routing.html – Brewal 2014-10-06 19:32:02
阅读有关RESTful路由。 – 2014-10-06 19:32:33
可以通过路由 – Naincy 2014-10-06 19:36:44