2011-08-31 84 views
2

好的,也许这个标题有点混乱。我想要做的是捕获任何信息,如果有的话在第一个URI分段之后,如果该分段是特定的并将其转发到另一个控制器。这是我的路线文件:CodeIgniter,一条路线中有多个可能的分段

$route['default_controller'] = "main"; 
$route['404_override'] = ''; 
$route['testroute'] = "main"; 

那么,这是什么一样,现在,如果我得到mydomain.com/testroute它显示我的默认页面,这是它应该。但是,我想要的是,如果我去mydomain.com/testroute/testmethod/其中testmethod是主控制器中的一个方法,我希望它也转发。所以基本上我希望它能够路由到主控制器,而不管在testroute之后是否有更多的段,但是如果有,它们应该作为主控制器的方法调用传递。

回答

3

只需捕获给定的参数并将其传递给控制器​​例如像这样:

$route['testroute/(:any)'] = "main/$1"; 

(:any)实际上捕获任何类型的字符串。还有其他选择器。有关此主题的更多信息,请参阅here

编辑(回答你的评论):

如果你想你的主控制器的index()方法的一般途径,只需添加这两种路线:

$route['testroute'] = "main"; 
$route['testroute/(:any)'] = "main/$1"; 
+0

呀。我试过了。问题是我得到一个404,如果我只是去testrute /没有任何细分后。如果没有更多的段而不必声明一条单独的路由,是否有办法将它解析为主索引? – LoneWolfPR

+0

见上面,我编辑了答案。另外,我真的建议考虑看看在CI手册的文章,有很多方法可以让路由(正则表达式和其他不错的东西) –

+0

响应编辑:是的,我想,这就是我必须做的,如果可能的话,我只是想尽量保持一条路线的简单性。 – LoneWolfPR

0

呃,什么?这就是CodeIgniter控制器的工作原理。向我们展示一些代码?什么是不工作呢?

您是否在.htaccess文件中配置了URL重写功能,因此您不需要URL中的/index.php/testroute

开放的.htaccess,并尝试这个代码,如果你还没有改写这样的:

RewriteEngine on 
RewriteCond $1 !^(index\.php|robots\.txt) 
RewriteRule ^(.*)$ index.php/$1 [L] 

如果您还没有配置重写话,就不会没有这种工作^,但你可以像访问mydomain.com/path/to/ci/index.php/testroute/testmethod

+0

这是材料的评论,没有答案.. – Ben

+0

@Ben Refresh,请。请参阅我编辑答案以包含更多信息以尝试。 – Cyclone

+0

仍然错过了我认为的观点 – Ben