URI路由中的多个通配符不起作用

时间:2012-06-27 16:08:26

标签: regex codeigniter url

我在codeigniter的URI路由功能方面遇到了一个奇怪的问题......特别是围绕使用通配符。

我正在尝试将以下网址发送到我的“位置”控制器,调用我的“编辑”方法:

http://foo.bar/stores/4fdbc15b8e08233c6d9f7d91/locations/4fdbc2ed8e08233c6d9f7d93/edit

我的路线配置文件中有以下设置:

$route['stores/(:any)/locations/(:any)/edit'] = 'locations/edit';

但是......当我尝试访问上述网址时,网站就会死亡。

我试图使用正则表达式,但不幸的是正则表达式不是我的强项,因此它也无效。

我已经查看了其他stackoverflow示例和其他网站,但没有真正说明我所拥有的奇怪的URL结构。任何建议/决议将不胜感激。提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

假设您的请求中的字符串uri是可变长度的,您可以尝试这样的事情:

$route['stores/([a-z0-9]*)/locations/([a-z0-9]*)/edit'] = 'locations/edit';

但是你没有说明正则表达式匹配的字符串要做什么。如果您只是将它们添加到最后,您的路线将如下所示:

$route['stores/([a-z0-9]*)/locations/([a-z0-9]*)/edit'] = 'locations/edit/$1/$2';

在这种情况下,在您的控制器方法中,您可以使用$this->uri_segment()函数来解析字符串。

$firstHash = $this->uri_segment(3);
$secondHash = $this->uri_segment(4);

答案 1 :(得分:0)

这是一种做你想做的事情的简单技巧

$route['stores/(:any)'] = 'locations/edit';

然后,使用 uri_segment(n)获取编辑控制器功能中的值。

简单?