【问题标题】:Additional URI segment before Codeigniter controllerCodeigniter 控制器之前的附加 URI 段
【发布时间】:2012-02-26 10:00:38
【问题描述】:

我正在 Codeigniter 中制作这个小项目,我需要在控制器之前添加一个段。
默认的 Codeigniter URL 是:

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

我需要的是:

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

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

基本上我需要的是它喜欢忽略那个段(我会在一个钩子中捕获那个段,扩展 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'

但它的工作原理和前一个一样,(.*) 只是一个片段,而不是整个 url... 有什么方法可以写
$route['(:any)/rest of the url'] = 'rest of the url';
我也尝试过使用 .htaccess:

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

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

但它不起作用,因为 $2 引用了第一部分,例如,如果我写:
base_url/one/two 将其重写为 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,应该是。

一个很长的问题,但我希望有人能提供帮助,谢谢!

【问题讨论】:

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


    【解决方案1】:

    看看这是否有效:

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

    【讨论】:

    • 谢谢,但不完全是我需要的,它忽略了“控制器”或其他硬编码的名称。也许是一个更好的例子:我有一个带有控制器帖子、功能编辑和参数 ID 的博客系统。如果用户的博客名称是“whatever”来编辑 id 为 123 的帖子,则 url 将是:example.com/whatever/post/edit/123 它将执行 id 为 123 的帖子控制器编辑方法,其他用户有一个博客“asd”他去example.com/asd/post/edit/456编辑一个帖子。我会得到博客名称(无论是什么/asd 在一个钩子或类似的东西)并检查是否有一个具有该名称的博客,但这在这里并不重要。
    猜你喜欢
    • 1970-01-01
    • 2012-06-20
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多