2013-10-02 155 views
0

我有基于URI从数据库中生成的页面。 Functons,因为它应该,但我不能设置我的routes消除从URL的控制器和功能。路由问题 - Codeigniter

$route['studios/(:any)'] = 'studios/location/$1'; 

现在,我有路由来显示控制器名称和URI变量(无论可能)。但是,我想消除控制器名称,只显示被称为URL的URI变量。很难解释 - 希望有人拿起我的意思......

当前网址是:domain.com/studios/studio1

但我只想显示:domain.com/studio1

我试过$route['/(:any)'] = 'studios/location/$1';,但是这搞乱了我的整个网站。

帮助?

回答

1
$route['studios(/:any)*'] = 'studios/location'; 

这条路线将迫使一切从studiosstudios/location。然后,您可以访问任何使用URI段的参数:

$id = $this->uri->segment(2); 

如果您的网址是somewhere.com/studios/location/2$id将解析为2

但是,因为你希望它仅仅是从根本上,你会必须把你的替代路线的路线文件的底部,故最后评估:

// all other routes here. Which must be specifically 
// defined if you want a catch all like the one you mentioned 
$route['(:any)'] = 'studios/location'; 

另外,如果你想有一个高维护的网站,你可以指定路由的集合,像这样:

$route['(studio1|studio2|studio3)'] = 'studios/location/$1'; 
+0

完美!谢谢。很好的解释。 –

0

它是如何“搞乱你的网站”?

在任何情况下,你不应该有/前(:任何)

刚:

$route['(:any)'] = 'studios/location/$1'; 

编辑:

前的$路线[ '(:任何)'] ,你需要指定所有你的控制器的路由;这是非常正常的,不知道如果我把它叫做“高维修”,但你需要决定

+0

可能导致该路由强制每个请求到工作室/位置 –

+0

这是OP说他想要的;啊,我明白你的意思了。这解释了“弄乱我的整个网站”。我会编辑 – jmadsen

+0

是的,它会被认为是高维护的唯一原因是因为默认情况下,CI将通过控制器/方法/参数访问,当有一个捕获所有它几乎劫持。您需要为捕捉所有页面上的所有页面指定一个路由,并且如果由于某种原因导致站点不断变化或者将其交给其他人,他们必须知道该路由。 –