代码点火器路由帮助,404 问题


code igniter routing help, 404 issue

您好,我有一个代码点火器项目,我试图启动,但我遇到了一些严重的路由问题。

我按照代码点火器官方教程制作新闻应用程序,但我宁愿将我的新闻页面静态然后在数据库上动态。

问题是我想将页面组织到单独的文件夹中

视图/页面 = 对于所有站点基本页面浏览量/新闻 = 所有新闻帖子

在我的路线上.php文件我有这个

$route['(:any)'] = 'news/view/$1';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

我也认为ID需要一个新闻控制器,所以我做了这个

<?php
class News extends CI_Controller {
public function view($page = 'home')
{
  if ( ! file_exists(APPPATH.'/views/news/'.$page.'.php'))
{
    // Whoops, we don't have a page for that!
    show_404();
}
$data['title'] = ucfirst($page); // Capitalize the first letter
$this->load->view('templates/header', $data);
$this->load->view('news/'.$page, $data);
$this->load->view('templates/footer', $data);
  }
}

我还在 news 文件夹中包含一个 home.php 文件以查看它是否有效,但每次我尝试访问 ziplinegolive.com/index.php/news/时,我都会收到 404 错误。

有谁知道我怎么能简单地做到这一点?我已经在 ALOT 中搜索了解决方案,但没有教程像我的一样,也没有人简单地解释它。

我注意到的第一个问题是您的路由:

$route['(:any)'] = 'news/view/$1';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

此处的第一个路由条目与第二个条目具有相同的键。因此,您的第一个条目将被清除。而且,密钥(:any)将匹配任何内容,因此您的default_controller条目(或在此条目之后的任何其他条目)将永远不会被使用。

另外,我相信一般来说,CI建议你使用更漂亮的URL,如"news/one",而不是像"index.php/news/one"这样的东西。如果要将"news/one"映射到新闻控制器的视图方法,则路由条目可能如下所示:

$route['news/(:any)'] = 'news/view/$1'

然后你的新闻控制器看起来像这样

class News extends CI_Controller
{
  public function view( $page = 'home' )
  {
    $this->load->view('news/'.$page, $data);
  }
}

最后,虽然我强烈建议不要按照您规定的方式使用 file_exists,但定义的常量APPPATH是相对的,而不是绝对路径,这可能会导致您的file_exists调用出现问题。我建议使用绝对路径来确保在检查文件是否存在时没有路径解析问题