2012-10-11 78 views
2

可以說我有一個控制器'標準'的動作'主'。Codeigniter - 自定義路線

如果我訪問www.myapp.com/standard/main,它將調用標準控制器中的主要操作。

現在,如果我想改變我進入routes.php文件和設置某事像下面的網址:

$路線[「歡迎」] =「標準/主」;

現在我可以訪問www.myapp.com/welcome,它會調用相同的動作。

但是,仍然可以訪問www.myapp.com/standard/main。現在我有兩條路線導致相同的控制器操作。

這是通常的方式還是應該以某種方式禁用現在不需要的www.myapp.com/standard/main路由?如果是這樣,我該怎麼做?

在此先感謝。

回答

1

這完全是你決定的默認行爲。如果您決定禁用原始地址,你可以寫類似

$route['standard/main'] = 'standard/404'; 

或任何自定義位置,這取決於你的項目,你怎麼想它應該是什麼樣子,比如你可以「塊」任何從方法直接訪問:

$route['standard/(:any)'] = 'standard/404'; 

但記住,如果你的路線像你這樣$route['welcome'] = "standard/main";,那麼你應該永遠記住,功能$this->uri->segment(n)會顯示不同的值,例如,如果我會去的網址yoursite.com/welcome/123,值爲$this->uri->segment(2)將是123,但如果我訪問原始URL yoursite.com/standard/main/123,它的值將更改爲main

忍受這一點,併爲自己決定!

1

假設這是一個常用的結構,您將使用每個動作,您可以檢查網段中的網段,然後進行適當的重定向。在從standard/main去歡迎的情況下,您將有以下:

class Standard extends CI_Controller { 

    public function main() { 
     if($this->uri->segment(1) == 'standard') { 
      redirect('welcome', 'location', '301'); 
     } 
    } 

} 

這會再檢查第一段的URL,如果它看到你已經來到這個URL,您重定向到適當的路線。這可以應用於您想要做同樣事情的每個動作。提供301表示永久重定向。

更新

剛剛發現了類似的問題(同):Only allow URL's specified in routes to be seen in Codeigniter