假设我有一个控制器,“文章”,但我希望它显示为子文件夹(例如“博客/文章”),我可以添加这样的路线:
$route['blog/articles'] = 'articles';
$route['blog/articles/(:any)'] = 'articles/$1';
这很好用,现在唯一的问题是example.com/articles
和example.com/blog/articles
都使用了Articles控制器,从而解析了相同的内容。有办法防止这种情况吗?
如果人们不理解,可以增加一点清晰度:
example.com/articles
返回404,因为这不是正确的网址,example.com/blog/articles
是。答案 0 :(得分:6)
把它推到你的控制器中:
function __construct()
{
parent::Controller();
$this->uri->uri_segment(1) == 'blog' OR show_404();
}
答案 1 :(得分:2)
您可以在Codeigniter控制器中使用子文件夹,因此在CI中,以下目录结构可以使用: application / controllers / blog / articles.php然后访问 http://example.com/blog/articles/ *。
答案 2 :(得分:1)
如果由于某种原因,您设置了路由而不是访问文件夹中的控制器(例如,您希望拥有一个博客控制器,并且不想路由到它),您可以按照建议进行操作上面并将'blog'的测试添加到构造函数中。
如果您使用的是PHP5,则可以使用如下构造函数:
function __construct()
{
parent::Controller();
$this->uri->uri_segment(1) == 'blog' OR redirect('/blog/articles');
}
或者,在PHP4中,像这样:
function Articles()
{
parent::Controller();
$this->uri->uri_segment(1) == 'blog' OR redirect('/blog/articles');
}
我建议您使用redirect('blog/articles')
代替show_404()
,这样您就可以将点击/文章的用户定向到正确的位置,而不是只显示404页面。
答案 3 :(得分:0)
路由并不意味着它将使用不同的控制器,它只是为同一个控制器创建别名url段。如果您希望为这些网址段使用不同的控制器,那么将创建另一个控制器。
答案 4 :(得分:0)
如果/ blog /和/ articles /都使用相同的控制器,只需在路径文件中添加新规则,即可将其中一个重新路由到另一个控制器。