Codeigniter控制器之前的附加URI段

时间:2012-02-26 10:00:39

标签: codeigniter url-rewriting url-routing uri codeigniter-url

我正在Codeigniter中创建这个小项目,我需要在控制器之前增加一个分段 默认的Codeigniter URL是:

base_url/controller/function/parameter1/../parametern  

我需要的是:

base_url/something/controller/function/parameter1/../parametern 

其中“something”是用户创建的名称,因此我无法按照其他主题中的建议在控制器文件夹中创建子文件夹,因为它的动态和每个用户选择他喜欢的内容。

基本上我需要的是它忽略那个段(我会在钩子中捕获该段,扩展CI_controller或类似的东西并验证它),例如,如果我写 base_url / stackoverflow-rocks / home / function base_url / asd-whatever / home / function Codeigniter会将其视为 base_url / home / function

我也看过Passing variables before controller URI segment in CodeIgniter问题,它与我的几乎一样,但建议的答案不起作用。
我使用了$route['(:any)/(:any)'] = '$2';,如果url是base_url / whatever / home,但是如果url是base_url / whatever / home / function或base_url / whatever / home / function / param1 /../ paramn则不行,解决方法是写:

$route['(:any)/(:any)'] = '$2';  
$route['(:any)/(:any)/(:any)'] = '$2/$3';  
...  
$route['(:any)/../(:any)'] = '$2/../$n'  

这很容易,但看起来有点蹩脚,只有在url中有2到n个段时它才会起作用。我也尝试将它与正则表达式混合,例如:

$route['(:any)/(.*)'] = '$2'

但它的工作方式与前一个一样,(。*)只是一个段而不是整个网址... 是否有一些方法可以写出 $route['(:any)/rest of the url'] = 'rest of the url';
我也尝试过使用.htaccess:

RewriteRule ([^/]*)/(.*) inedx.php?/$2  

RewriteRule (.*)/(.*) index.php?/$2

但它没有用,因为$ 2引用了第一部分,例如,如果我写:
base_url / one / 2将它重写为base_url / index.php?/ one。 但如果我使用:

RewriteRule (.*)/(.*) index.php?/$1/test/$2

它应该引用它,例如base_url / one / two => base_url / index.php?/ one / test / two,所以$ 1 = 1,$ 2 = 2,应该是。

相当长的问题,但我希望有人可以提供帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

看看是否有效:

$route['base_url/controller/(:any)'] = 'base_url/$1'