CodeIgniter路由不接受与路由表不同的异常

fsi0uk1n  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(140)

不知怎么的我被我的路由规则卡住了。我不能为一个超过路由规则的页面设置路由。例如我在我的routes.php中有:

$route['(:any)/(:any)/(:any)'] = 'pages/view/$1/$2/$3';
$route['(:any)/(:any)'] = 'pages/view/$1/$2';

因此页面正确加载地址:

  • mypage.com/value1/value2/value3/
  • mypage.com/value1/value2/

然而,如果用户有意输入另一个值,它将抛出base_url()异常,这甚至不是我的404异常捕获所处理的,所以我得到:

An uncaught Exception was encountered
Type: Error
Message: Call to undefined function base_url()

当然,我可以创建另一个规则来捕获第4个值,但第5个值将引发错误;)
我想要实现的是找到一个规则,它将匹配到任何超过最后一个规则的树,类似于:

$route['(:any)/(:any)/(:any)/(no matter the value and tree)'] = 'pages/view/$1/$2/$3';
$route['(:any)/(:any)/(:any)'] = 'pages/view/$1/$2/$3';
$route['(:any)/(:any)'] = 'pages/view/$1/$2';

因此,即使用户键入以下内容,也不会出现任何错误:

  • mypage.com/value1/value2/value3/4/5/6/7/8/9//10/11/12/13/14/15/blabla/etc...

我肯定有一个解决方案(一些正则表达式有?(:任何)或:任何将不工作,它将只捕获一个树多),但我没有找到任何,我知道解决方案可能很简单,但我还没有掌握CI路由...
提前感谢您的任何提示。

bwleehnv

bwleehnv1#

你可以这样使用一个普通的正则表达式:

$route['(:any)/(:any)/(:any)'] = 'pages/view/$1/$2/$3';
$route['(:any)/(:any)'] = 'pages/view/$1/$2';
$route['(:any)/(:any)/(:any)/.*'] = 'pages/view/$1/$2/$3';

更重要的问题是为什么不加载一个404?如果你的自定义404页面使用base_url()函数,自动加载url助手将修复这个错误。

相关问题