【问题标题】:Routing not working as expected in CodeIgniter路由在 CodeIgniter 中没有按预期工作
【发布时间】:2015-01-29 12:44:14
【问题描述】:

mywebsite.com/it/moto/ 应该重定向到主页。因此我在 routes.php 中写了这个

$route['(\w{2})/(auto|moto)/(.*)'] = '$3';
$route['(\w{2})/(auto|moto)'] = $route['default_controller'];

效果很好。另外,mywebsite.com/it/moto/mercatino 路由到Mercatino 控制器,非常完美。

不,我希望这个 mywebsite.com/it/moto/mercatino/componenti-veicolo/221/molle-originali-r6 路由到 Mercatino 控制器内的这个函数

public function prodotto($category, $id, $title){

}

因此,我在 routes.php 中写了这一行

$route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4";

但我收到 404 错误。知道如何解决这个问题吗?

【问题讨论】:

    标签: php codeigniter routing


    【解决方案1】:
    $route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4";
    

    “mercatino/prodotto/$2/$3/$4”中有多少个目录?默认情况下,我认为 codeigniter 不会进入超过 2 级的目录。

    我的意思是,当 codeigniter 查找文件时,它假定控制器内只能再有一个目录。所以,如果你有controllers/d1/file.php,你很好,但如果你有controllers/d1/d2/file.php,它将不适用于 CI 的默认行为。

    要使其正常工作,您可能必须覆盖 Router classfetch_directory 函数或 _validate_request 函数。

    【讨论】:

    • 没有目录。 /prodotto/ 之后的所有“目录”都作为参数传递给 prodotto() 函数,这就是 codeigniter 所做的。因此,例如,如果你有一个像/dir1/dir2/dir3/..../dirn/ 这样的 url,CI 将访问类 Dir1,调用函数 dir2 并将参数 /dir3/.../dirn/ 传递给该函数
    • 好的,我明白了。也许您可以尝试删除{1}。可能是 CI 不支持路由中的那种类型的正则表达式。不确定。
    • 我找到了解决方案。看我的回答
    【解决方案2】:

    这样解决

    $route['(.*)/(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$3/$4/$5"; //rule 1
    $route['(\w{2})/(auto|moto)/(.*)'] = '$3'; //rule 2
    $route['(\w{2})/(auto|moto)'] = $route['default_controller']; //rule 3
    

    通过将mercatino 规则放在所有其他规则之前并在之前添加(.*)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 2011-08-30
      • 2012-10-04
      相关资源
      最近更新 更多