Codeigniter控制器之前的附加URI段
我在Codeigniter中制作这个小项目,我需要在控制器之前有一个额外的段。Codeigniter控制器之前的附加URI段,codeigniter,url-rewriting,url-routing,uri,codeigniter-url,Codeigniter,Url Rewriting,Url Routing,Uri,Codeigniter Url,我在Codeigniter中制作这个小项目,我需要在控制器之前有一个额外的段。 默认的Codeigniter URL为: base_url/controller/function/parameter1/../parametern 我需要的是: base_url/something/controller/function/parameter1/../parametern 其中“某物”是用户创建的名称,因此我不能像其他主题中建议的那样在控制器文件夹中创建子文件夹,因为它是动态的,每个用户都
默认的Codeigniter URL为:
base_url/controller/function/parameter1/../parametern
我需要的是:
base_url/something/controller/function/parameter1/../parametern
其中“某物”是用户创建的名称,因此我不能像其他主题中建议的那样在控制器文件夹中创建子文件夹,因为它是动态的,每个用户都选择自己喜欢的
基本上,我需要的是它会忽略该段(我会在钩子中捕获该段,扩展CI_控制器或类似的东西并验证它),例如,如果我编写base_url/stackoverflow rocks/home/function,base\u url/asd which/home/functionCodeigniter将其视为base\u url/home/function
我也看过这个问题,它和我的几乎一样,但建议的答案不起作用。我使用了
$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'
但它的工作原理与前一个一样,(*)只是一个部分,而不是整个url。。。
有什么方法可以直接写$route['(:any)/url的其余部分]='url的其余部分'代码>?
我还尝试使用.htaccess:
RewriteRule ([^/]*)/(.*) inedx.php?/$2
或
但它不起作用,因为$2引用了第一部分,例如,如果我写:
base\u url/one/two它将其重写为base\u 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
这是一个很长的问题,但我希望有人能帮忙,谢谢 看看这是否有效:
$route['base_url/controller/(:any)'] = 'base_url/$1'
看看这是否有效:
$route['base_url/controller/(:any)'] = 'base_url/$1'
谢谢,但不完全是我需要的,它忽略了“控制器”或其他硬编码的名称。也许是一个更好的例子:我有一个博客系统,带有controller post、function edit和parameter id。如果用户的博客名为“whatever”,则编辑id为123的帖子的url为:example.com/whater/post/edit/123,它将执行id为123的post controllers edit方法,其他用户有一个博客“asd”要编辑帖子,他可以访问example.com/asd/post/edit/456。我会得到博客名(钩子中的/asd或类似的东西)并检查是否有具有该名称的博客,但这在这里并不重要。谢谢,但不完全是我需要的,它忽略了“controller”或其他硬编码的名称。也许是一个更好的例子:我有一个博客系统,带有controller post、function edit和parameter id。如果用户的博客名为“whatever”,则编辑id为123的帖子的url为:example.com/whater/post/edit/123,它将执行id为123的post controllers edit方法,其他用户有一个博客“asd”要编辑帖子,他可以访问example.com/asd/post/edit/456。我会得到blog名称(hook中的/asd或类似的东西)并检查是否有具有该名称的blog,但这在这里并不重要。