Php 从url隐藏codeigniter控制器和方法名称
我的url是这样的:Php 从url隐藏codeigniter控制器和方法名称,php,codeigniter,Php,Codeigniter,我的url是这样的:http://example.com/controller/method/param1/param2/param3/param4 <div class="post-content"> <ul> <?php foreach( $query->result() as $post ) : ?> <li><a href="<?php echo site_url($post->
http://example.com/controller/method/param1/param2/param3/param4
<div class="post-content">
<ul>
<?php foreach( $query->result() as $post ) : ?>
<li><a href="<?php echo site_url($post->term_name.'/'.$post->term_id.'/'.$post->id.'/'.strtolower(url_title($post->title))); ?>"><?php echo $post->title ?></a></li>
<?php endforeach; ?>
</ul>
</div>
我的目标是:http://example.com/param1/param2/param3/param4
<div class="post-content">
<ul>
<?php foreach( $query->result() as $post ) : ?>
<li><a href="<?php echo site_url($post->term_name.'/'.$post->term_id.'/'.$post->id.'/'.strtolower(url_title($post->title))); ?>"><?php echo $post->title ?></a></li>
<?php endforeach; ?>
</ul>
</div>
这里是我的控制器“主页”和“读取”。我还在底部包括我的视图和路由配置
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Home extends CI_Controller {
public function __construct()
{
parent::__construct();
}
/*
* Index method
*/
public function index() {
$this->db->select('a.*, c.*');
$this->db->join('category as c', 'c.catid=a.catid');
$this->db->limit(10);
$this->db->order_by('a.id', 'DESC');
$data['query'] = $this->db->get('article as a');
$this->load->view('header');
$this->load->view('home_view', $data);
$this->load->view('footer');
}
}
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Read extends CI_Controller {
public function __construct()
{
parent::__construct();
}
/*
* Index method
*/
public function index() {
$id = isset($this->uri->segment(3)) ? $this->uri->segment(3) : FALSE;
$this->db->select('a.*, c.*');
$this->db->join('category as c', 'c.catid=a.catid');
$this->db->where('p.id', $id);
$this->db->limit(1);
$data['query'] = $this->db->get('article as a');
$this->load->view('header');
$this->load->view('single_view', $data);
$this->load->view('footer');
}
}
当我定义控制器名称时,这没有问题。但我不知道我的单个帖子的url怎么只包含这四个参数
<?php echo site_url('read/'.$post->term_name.'/'.$post->term_id.'/'.$post->id.'/'.strtolower(url_title($post->title))); ?>
任何帮助和建议都将不胜感激
致以最诚挚的问候您可以在
config/routes.php
中使用自定义的路由
。比如说
#http://example.com/controller_name/method_name/param1/param2/param3/param4
$route['param1/param2/param3/param4'] = 'controller_name/method_name';
#Instead of ->
#http://example.com/controller_name/method_name/param1/param2/param3/param4
# Display -> http://example.com/param1/param2/param3/param4
检查您可以放置在下一路线的文档:
$route['(:any)/(:any)/(:any)/(:any)'] = 'controller/method/$1/$2/$3/$4';
$route['(:any)/(:any)/(:any)'] = 'controller/method/$1/$2/$3';
$route['(:any)/(:any)'] = 'controller/method/$1/$2';
或者如果您正在传递数字/整数
$route['(:num)/(:num)/(:num)/(:num)'] = 'controller/method/$1/$2/$3/$4';
您也不能忘记将参数传递给您的方法,即使是FALSE
public function index($param1, $param2, $param3, $param4)
{
//rest of code that is using params
}
非常感谢@Tpojka,您的解决方案非常有效。现在,当我从urlEdited中删除一个参数时,发生了404重定向。请注意,通配符占位符位于已知路由之后。若答案是有效的,你们可以接受它,让它可以从引擎中搜索。你是说根据我的目标,
$route['param1/param2/param3/param4']
类似于$route['(:any)/(:num)/(:num)/(:any)]
?