[英]Codeigniter .htaccess rewriting for database
我在Codeigniter遇到困难。 我试图通过传递记录ID作为URL的一部分从MySQL数据中获取数据
该网址是
本地主机/ site_folder / page / page_title / 2
在上面的URL中, page是控制器的名称, 2是数据库中记录的主要ID(可以是1到9999之间的任何数字)。
我的控制器包括:
public function index()
{
$this->load->helper('url');
$this->load->model('pages_model');
$id = $this->uri->segment(3,1);
if (empty($id))
{
show_404();
}
$data['page'] = $this->pages_model->get_page($id);
$this->load->view('page',$data);
}
我的.htaccess包含这个
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
当我在地址栏中输入localhost/site_folder/page/page_title/2
,它会抛出404。
但是,当我输入localhost/site_folder/page
它会显示默认的数据库条目,如上面segment(3,1)
的第二个值所示。
因此,如何更改.htaccess文件以进行可行的重写?
我尝试了以下方法,但没有一个对我有用:
您可以尝试使用CI文档https://ellislab.com/codeigniter/user-guide/general/controllers.html中所述的_remap
函数。
_remap
函数(如果存在于控制器中)是在任何类方法之前调用的函数,在此函数中,您可以检查发送到该函数的参数,并根据此调用检查控制器的任何方法。
对于您的示例,因为我假设page_title是动态的,您可以设置一个正则表达式来对其进行检查,或者如以下示例中所述,检查该方法是否不存在,然后将其视为页面标题(这意味着您必须确保可以在此控制器中不是页面标题和方法名称)
public function _remap($method, $params = array())
{
if (!method_exists($this, $method))
{
// assume this is a page_title and run the index method
$this->index($method, $params);
}
else {
// means that method exists then run that method
$this->$method( $params);
}
}
还请记住,这意味着当有人只是键入控制器将其视为page_title的随机字符串时,您应该考虑404标头的索引方法用法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.