如果您的控制器中只有一個稱爲index()
的功能,那麼這些解決方案中的大多數僅適用。如果你有這樣的在你的路線:
$route['search/(:any)'] = 'search/index/$1';
隨着你的路由上面,會發生什麼是你的搜索功能將工作,但這時如果您添加任何其他功能相同的控制器,他們都會被重定向到/search/index/$1
。
我能想到的唯一的解決方案允許您使用您想要的URL,同時仍然能夠添加任何其他功能到您的搜索控制器是添加一種凌亂的條件到您的路線文件。下面是它的樣子和它做什麼:
$request = $_SERVER['REQUEST_URI']; // Only add this for readability if(!strpos($request, 'search/another_function') || !strpos($request, 'search/more_functions')) { $route['search/(:any)'] = 'search/index/$1'; }
這是什麼東西做的基本上是說:「如果請求的URL不包含我的任何搜索控制器功能,那麼它必須意味的名字對於索引,我們將激活索引的路由規則「。
這將允許您在沒有問題的情況下接收search/any_other_functions_you_have
的請求,並且只在請求URI與它們中的任何一個不匹配時才激活用於隱藏索引函數的規則。
這樣做的一個副作用就是你永遠不會得到404。例如,如果有人輸入一個像「yourdomain.com/search/something」這樣的URL,並且他們希望它顯示一個非搜索結果頁面,將不會得到一個404提醒他們這樣的事實,即沒有這樣的頁面,而是應用程序會假設他們輸入的是搜索詞。然而,聽起來這對你來說並不是什麼大問題,而且我也沒有看到一個控制器不可能返回404s是一件可怕的事情。
您是否最終找到解決方案? – robjbrain 2011-04-06 17:21:30