2012-11-26 30 views
1

我想开发一个社交网络,人们可以访问mysite.com/username。我使用了_remap函数,并且它能够工作,但是它不会加载任何其他控制器。有人可以帮助吗?用户名作为控制器codeigniter

这是我的默认控制器:

​​

,这是我的路线文件:

if (! defined('BASEPATH')) exit('No direct script access allowed'); 

$route['default_controller'] = "welcome"; 
$route['404_override'] = ''; 


$route['login'] = "auth/login"; 
$route['logout'] = "auth/logout"; 
$route['register'] = "auth/create_user"; 


/*$route['news'] = "news/index"; 
$route['politics'] = "politics/index"; 
$route['culture'] = "culture/index"; 
$route['messages'] = "messages/index";*/ 


$route['(:any)/(:any)'] = "$1/$2"; 
$route['(:any)/(:any)/(:any)'] = "$1/$2/$3"; 
$route['(.*)'] = 'welcome/index/$1'; 

不会加载一个控制器的一个例子..

session_start(); 

class News extends CI_Controller { 

    function News() 
    { 
     parent::Controller(); 
    } 

    function index() { 
     $data['title'] = 'Politics'; 
     $data['main_content'] = 'news/index'; 
     $this->load->view('shared/template',$data); 
    } 
} 

+1

codeigniter还活着吗?让它已经死了! – ChocoDeveloper

回答

0

您必须在中编写规则文件只需添加以下行

$route['(:any)'] = "welcome/index/$1"; 

如果您已经添加的.htaccess规则从网址中删除index.php文件,也可以访问诸如http://example.com/index.php/username

+1

谢谢,但问题是我的所有其他控制器仍然指向welcome/index函数。 – user1717060

+0

将此规则添加到文件底部,如果您觉得有用,请接受答案 –

1

我工作的一个项目,您可以通过使用http://example.com/username访问在这些网址上有类似的要求。

我做到了通过添加路线是这样的:

$routes['news'] = 'news/index'; 

$routes['news'] = 'news'; 

这正是你所注释行。

不幸的是,没有这些线条是不可能的(至少我做不到)。

如果您的网址是:example.com/news/index,它将符合规则$routes['(:any)/(:any)'],但是如果它是example.com/news,它将不匹配任何内容并转到您的最后一条规则。

CodeIgniter的路由不采取真正的细分市场,但URI中显示的URI段。因此,您的网址example.com/news将被解释为$username = news

你必须为每个只有1个uri段的url做uri路由。您需要确保没有用户与您的控制器具有相同的用户名,或者他/她永远不会访问用户页面。

+0

谢谢。这工作! – user1717060