在CodeIgniter中重新路由页面时,如何防止重复内容?

时间:2010-07-08 11:02:18

标签: codeigniter routing controller

假设我有一个控制器,“文章”,但我希望它显示为子文件夹(例如“博客/文章”),我可以添加这样的路线:

$route['blog/articles'] = 'articles';
$route['blog/articles/(:any)'] = 'articles/$1';

这很好用,现在唯一的问题是example.com/articlesexample.com/blog/articles都使用了Articles控制器,从而解析了相同的内容。有办法防止这种情况吗?

如果人们不理解,可以增加一点清晰度:

  • 在这个例子中,我没有'博客'控制器,但我希望'文章'等看起来像是在子文件夹中(这是组织的事情)。
  • 我可以拥有一个带有“文章”功能的博客控制器,但我可能会有一堆“子控制器”,并希望将功能分开(否则我最终可能会有30多个功能用于单独的实体)博客控制器)。
  • 我希望example.com/articles返回404,因为这不是正确的网址,example.com/blog/articles是。

5 个答案:

答案 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 /都使用相同的控制器,只需在路径文件中添加新规则,即可将其中一个重新路由到另一个控制器。