2010-07-08 20 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/訪問*。

相關問題