edit
我在路线中的解决方案.php:
$route['news'] = 'news_controller';
$route['gallery'] = 'gallery_controller';
$route['(:any)'] = 'sites/$1';
在我的网站管理员中:
function index($site_id = '') {
//sanitize $site_id.
$this->site = $this->sites_model->get_site($site_id);
//etc.
}
谢谢到燕
问题:
所以我用CodeIgniter写了一个小CMS。管理员可以创建网站。当 URL 的段与数据库中的段类似时,站点会自动打开。例如,mysite.com/sites/about 将调用"关于"站点。这工作正常。
现在我的网址有问题。 我想要这个网址
http://www.mysite.com/sites/about
转向这个:
http://www.mysite.com/about
问题是,我不能使用路由.php并为每个站点设置通配符。(因为它们是动态的,我不知道客户将创建哪些站点 - 而且我不想编辑他将创建的每个站点的路由.php文件 - 这应该自动完成)
问题是我也得到了其他修复控制器,例如新闻,图库或联系人:mysite.com/news,mysite.com/gallery,...他们工作正常
所以这是我的站点控制器:
class Sites extends Public_Controller {
public $site;
public $url_segment;
public function _remap($method)
{
$this->url_segment = $this->uri->segment(2);
$this->load->model('sites_model');
$this->site = $this->sites_model->get_site($this->url_segment);
if($this->site !== FALSE)
{
$this->show_site($this->site);
}
else
{
show_404($this->url_segment);
}
}
public function show_site($data)
{
$this->template->set('site', FALSE);
$this->template->set('site_title', $data['name']);
$this->template->set('content',$data['content']);
$this->template->load('public/template','sites/sites_view', $data);
}}
这是检查数据库的Site_model...如果url_segment适合数据库中的标题:
class Sites_model extends CI_Model {
public function get_site($site_url)
{
if($site_url != ""){
$this->db->where('name', $site_url);
$query = $this->db->get('sites', 1);
if($query->num_rows() > 0){
return $query->row_array();
}
else
{
return FALSE;
}
}else{
return FALSE;
}
} }
我想我需要一些东西,在不调用站点控制器时检查控制器是否存在(URL 的第一段),并检查站点是否在数据库中,当这是假的时,然后调用 404。
有什么建议可以解决这个问题吗?
顺便说一句:为我的英语而战
问候GN
您可以通过以下方式处理routes.php
,只需将(:any)
值保留在最后即可:
$route['news'] = 'news_controller';
$route['gallery'] = 'gallery_controller';
$route['(:any)'] = 'sites/$1';
在您的站点中,控制器使用 URL 中的数据路由到特定站点。
function index($site_id = '') {
//sanitize $site_id.
$this->site = $this->sites_model->get_site($site_id);
//etc.
}
我很难理解这个问题的全部意图,但是,据我所知,你不需要简单地添加:
if ($this->uri->segment(1) != 'sites')
... // handle malformed URL