【问题标题】:Codeigniter 3.1.16 routing issuesCodeigniter 3.1.16 路由问题
【发布时间】:2017-12-06 18:27:08
【问题描述】:

我在使用 codeigniter 时遇到了一些问题。 我的路由文件如下:

$route['admin/newgallery'] = 'gallery/do_upload';
$route['admin/listgallery'] = 'gallery/list';
$route['admin/create'] = 'posts/create';
$route['admin/listposts'] = 'posts/list';
$route['admin'] = 'admin/index';
$route['posts/(:any)'] = 'posts/view/$1';
$route['posts'] = 'posts/index';
$route['default_controller'] = 'pages/index';
$route['(:any)'] = 'pages/index/$1';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

除前两条外,所有路线都可以正常工作:

$route['admin/newgallery'] = 'gallery/do_upload';
$route['admin/listgallery'] = 'gallery/list';

当我输入mypage/admin/listgallery 时,它会正确调用gallery/list。问题是当我使用原始控制器/方法(在本例中为画廊/列表)键入地址时,它也会进入列表页面,而它应该调用 404 错误!我设置的所有其他路由规则都是这样做的,除了前两个!

【问题讨论】:

  • 解释什么是“原始控制器/方法”。
  • 我的意思是 mysyte/admin/listgallery 和 mysyte/gallery/list 进入列表页面,而 mysyte/gallery/list 应该进入错误页面!
  • 您的假设不正确-如果您有直接调用的控制器/方法,那么它当然会起作用。它与路由无关。您似乎认为路由神奇地覆盖了正常操作,正如您所观察到的,事实并非如此。那么,您认为您正在努力实现的目标是什么?
  • 如果你想覆盖原来的控制器/方法/参数调用,你应该使用 Apache(通常是 .htaccess)文件。检查重写和重定向规则。
  • routes.php文件是用来设置自定义路由的吧?如果我的假设不正确,这个文件就完全没用了!

标签: codeigniter routing codeigniter-3


【解决方案1】:

开箱即用,Codeigniter 允许您直接从 URL 访问任何控制器/方法。

它还提供了自定义路由的创建,因此您可以有 10 个或更多的 url 都指向同一个控制器/方法,如果这是您的愿望的话...

因此,如果您只想访问路由配置中定义的任何控制器/方法。

您需要测试 url 是否在 routes config 数组中定义。

主要代码类似于...

$this->load->helper('url');
if(!isset($this->router->routes[uri_string()])){
    show_404(); // Or whatever you want ...
}

你可以把它放在你想要保护的控制器的构造函数中。

当然,您可以创建一个通用控制器并以这种方式扩展您想要保护的那些控制器。

( 不推荐 ) 或者,如果你想变得真正“hacky”,你可以将它放在系统/核心/控制器构造函数中并使其成为系统范围。所以一切都需要在路线中定义。 注意:这会破坏“default_controller”。

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多