2010-07-08 23 views
3

说我有一个控制器,“公司章程”,但我希望它显示为一个子文件夹(如“博客/篇”),我可以添加这样的路线:如何在CodeIgniter中重新路由页面时防止重复内容?

$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是。
+1

根据您的代码,example.com/blog/articles使用文章控制器而不是博客控制器。 – stef 2010-07-22 15:58:02

回答

6

在你的控制器肖夫这样的:

function __construct() 
{ 
    parent::Controller(); 

    $this->uri->uri_segment(1) == 'blog' OR show_404(); 
} 
0

这里的路由并不意味着它会使用一个不同的控制器,它只是为同一个控制器创建别名url段。如果你想为这些url段使用不同的控制器,那么创建另一个控制器的方法就是这样。

+0

不太确定你的意思。我知道它将使用相同的控制器(文章),当我有不同的路由。无论我创建的控制是否仍然存在相同的问题 - 即使我正在使用替代路由,“/ mycontroller”也将始终转到该控制器。 – DisgruntledGoat 2010-07-08 11:24:59

+0

“/ mycontroller将永远转到该控制器,即使我使用替代路由” - 不要以为这是真的。路线中的条目将拦截正常流程。 – stef 2010-07-22 16:00:04

0

如果两个/博客/和/用品/使用相同的控制器,可以重新路由其中之一为不同的一种只需添加在你的路由的新规则文件。

+0

我没有使用博客控制器,我只是希望它显示为一个文件夹。另外,我不认为只是重新路由它们会起作用,我已经重新路由,但是'/ articles'仍然称为文章控制器。 – DisgruntledGoat 2010-07-23 11:36:13

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页面。

2

可以在笨控制器使用的子文件夹,所以在CI,下面的目录结构的工作原理: 应用/控制器/博客/ articles.php,然后在 http://example.com/blog/articles/访问*。

相关问题