我有一个名为' project'用索引方法
我想传递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/正在路由我项目页面,我该如何解决?
答案 0 :(得分:2)
您需要将“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
),因为他们的项目将无法访问!还有另一个原因让控制器列在某个地方...
答案 1 :(得分:0)
将“欢迎”路由规则放在“项目”路由规则之前。这样系统将匹配欢迎,不会去寻找下一个规则。或者,您可以使用(:num)而不是(:any),这样它只匹配数字(如果您的项目ID是数字)。