Php 代码点火器路由和slug给了我404
我正在一个客户端网站上工作,其中一部分用于检索新闻,这是我的第一个codeigniter应用程序,我遵循了CI教程、Slug和路由 我遇到的问题是,一切都很好,但如果要获得基于slug的记录,我会得到404。我所做的是从我的URL中删除index.php并对其进行测试,效果很好 这是我的路线。phpPhp 代码点火器路由和slug给了我404,php,codeigniter,slug,Php,Codeigniter,Slug,我正在一个客户端网站上工作,其中一部分用于检索新闻,这是我的第一个codeigniter应用程序,我遵循了CI教程、Slug和路由 我遇到的问题是,一切都很好,但如果要获得基于slug的记录,我会得到404。我所做的是从我的URL中删除index.php并对其进行测试,效果很好 这是我的路线。php $route['default_controller'] = "welcome"; $route['404_override'] = ''; $route['news/(:any)'] = 'ne
$route['default_controller'] = "welcome";
$route['404_override'] = '';
$route['news/(:any)'] = 'news/singe_news/$1';
$route['news'] = 'news';
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class News_model extends CI_Model {
function get_all(){
$sql="SELECT * FROM news AS news";
$query=$this->db->query($sql);
return $query->result();
}
//// get a single post
function get_single($slug = FALSE) {
if ($slug === FALSE)
{
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
return $query->row_array();
}
function news_categories(){
$sql="SELECT * FROM news_categories";
$query=$this->db->query($sql);
return $query->result();
}
}
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class News extends CI_Controller {
public function index()
{
$this->load->model('news_model');
$data['results']=$this->news_model->get_all();
$this->load->view('public/header', $data);
$this->load->view('public/menu');
$this->load->view('public/news-listing', $data);
$this->load->view('public/footer', $data);
}
public function single_news($slug) {
$this->load->model('news_model');
$data['single_news'] = $this->news_model->get_single();
/// if (empty($data['single_news']))
/// {
/// show_404();
///}
$this->load->view('public/header');
$this->load->view('public/menu');
$this->load->view('public/single-news', $data);
$this->load->view('public/footer');
}
}
这是我的模型新闻\u model.php
$route['default_controller'] = "welcome";
$route['404_override'] = '';
$route['news/(:any)'] = 'news/singe_news/$1';
$route['news'] = 'news';
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class News_model extends CI_Model {
function get_all(){
$sql="SELECT * FROM news AS news";
$query=$this->db->query($sql);
return $query->result();
}
//// get a single post
function get_single($slug = FALSE) {
if ($slug === FALSE)
{
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
return $query->row_array();
}
function news_categories(){
$sql="SELECT * FROM news_categories";
$query=$this->db->query($sql);
return $query->result();
}
}
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class News extends CI_Controller {
public function index()
{
$this->load->model('news_model');
$data['results']=$this->news_model->get_all();
$this->load->view('public/header', $data);
$this->load->view('public/menu');
$this->load->view('public/news-listing', $data);
$this->load->view('public/footer', $data);
}
public function single_news($slug) {
$this->load->model('news_model');
$data['single_news'] = $this->news_model->get_single();
/// if (empty($data['single_news']))
/// {
/// show_404();
///}
$this->load->view('public/header');
$this->load->view('public/menu');
$this->load->view('public/single-news', $data);
$this->load->view('public/footer');
}
}
美元slug从何而来
您的URI如下所示:www.example.com/controller/method/arg1/arg2/arg3(不带查询字符串)
少了什么吗
嗯,你应该做几件事:
使用autoload(config/autoload.php)加载您最常用的模型,或者如果这个模型没有广泛使用,至少在类构造函数中加载它
您没有将$slug参数传递给model方法,即使您要修复路由,这也不会起作用
$data['single_news']=$this->news_model->get_single()代码>
最好显示404,如果找不到slug,不要在fail时重新蚀刻所有数据
要修复404错误,请执行以下步骤:
检查.htaccess文件是否存在错误
检查配置中的uri_协议设置
尝试这样的路由:$route['news/(.+)$)?']=“news/singe_news/$1”;(这将取代新闻的两条路线)
更改$route['news/(:any)]='news/singe_news/$1'代码>至$route['news/(:any)]='news/single_news/$1'代码>图例,所以解决方案是1-正确的路由,2-向模型传递$slug,3-向类添加构造函数