2012-09-09 82 views
0

我已經在routes.php上定義了一個新的路由,但它有問題。codeigniter路由問題的主要網址

$route['default_controller'] = "index"; 
$route['404_override'] = ''; 
$route['(:any)'] = "oyna/oyun/$1"; 

我想將/2012.htm重定向到oyna/oyun/2012.htm,但我可以創建一個新問題。我無法達到我的其他控制器,如果我不如下定義:

$route['default_controller'] = "index"; 
$route['404_override'] = ''; 
$route['admin/(:any)/(:any)'] = 'admin/$1/$2'; 
$route['admin/(:any)'] = 'admin/$1'; 
$route['kategori/(:any)'] = "oyna/kategori/$1"; 
$route['(:any)'] = "oyna/oyun/$1"; 

如果我沒有定義在routes.php文件的任何控制器像上面我不能達到這一點。 我需要做什麼來解決?

回答

2

我不知道,但嘗試$route['(:num).htm'] = "oyna/oyun/$1.htm";

或更好更換$route['(:any)'] = "oyna/oyun/$1";$route['(\d+).htm'] = "oyna/oyun/$1.htm";

+0

但我需要使用(:任何)的搜索引擎優化。 – user1648692

0

CodeIgniter的路線是有點滑稽,但一旦你理解他們是如何處理的,它非常有意義。

由於路由使用正則表達式匹配,因此在路由到URL隱含的控制器/方法之前,它將查看路由,因此您不能只擁有超級通用的東西並期望其他所有工作。

如果你想匹配的網址,如http://domain.tld/2njkf4r和​​那麼你將不得不創建更具體的規則來處理「例外」的一般規則,將匹配第一種情況。

你是正確的,除非你定義了其他路由,否則它將不起作用,因爲只有$route['(:any)']作爲路由,每個請求都會匹配該路由。這條路線必須是你絕對的最後路線。這是一個痛苦的屁股,但必要的,因爲他們處理路線的方式。

+0

事實上,我有一個想法,如果「/」鍵入它意味着這不是/ oyna/oyun /。如果「/」沒有輸入,則表示這是控制器,不是嗎? – user1648692

+0

我不確定我是否理解你的評論...你能改述嗎? – Brendan

+0

我的oyna/oyun /的網址沒有「/」鍵。如果「/」鍵入這意味着它是控制器。 :) – user1648692

0

我的所有鏈接都在.htm結尾。這是解決方案:

$route['(:any).htm'] = "oyna/oyun/$1"; 

因爲我的控制器在最後沒有得到.htm。