我正在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,应该是。
相当长的问题,但我希望有人可以提供帮助,谢谢!
答案 0 :(得分:0)
看看是否有效:
$route['base_url/controller/(:any)'] = 'base_url/$1'