2013-04-21 137 views
0

我有一個簡單的問題,但我無法弄清楚。我寫了一個方法,它從url中讀取參數(一個參數是用戶名),並將所有數據查詢到該用戶並將其顯示在頁面中。用戶配置文件路由配置codeigniter

唯一的問題是,該方法是控制器的一部分,自然也有在URL中顯示(這簡直是說:不要太漂亮分享我也有寫的字符串,如下所示:

www.domain.com/controller/profile_guest?user=username 

我想擺脫一切就是用戶名之前所以爲它顯示爲:。

www.domain.com/username 

現在有兩種方案在這裏介紹

一)有人b對目錄進行排序,單擊配置文件名稱,然後重定向到配置文件頁面。一旦他喜歡他所看到的內容,他就會複製網址並分享它。

b)有人收到共享鏈接並點擊它,那麼應該加載的是帶有他收到的url的個人資料頁面,而不是完整的顯示控制器和方法的頁面。

這是可能實現的嗎?

感謝您的幫助:)

更新:

$route['default_controller'] = "main/index"; 
$route['404_override'] = ''; 
+0

是與路線是可能的。請閱讀手冊中的本節http://ellislab.com/codeigniter/user-guide/general/routing.html – 2013-04-21 13:17:34

+0

使用'404_override'功能。簡而言之,如果任何人訪問的URL並未在CodeIgniter中路由/映射,它將調用您在「404_override」中放置的任何控制器/操作。從這裏,你可以簡單地閱讀他們試圖閱讀的用戶名並顯示適當的頁面。 – Gavin 2013-04-22 08:48:35

回答

1

你可以使用這條路線:

$route['(:any)'] = "controller/profile_guest/$1"; 

但任何其他途徑,你需要將它手動編寫高於此路線。 例如:

$route['controller/view'] = "controller/view"; 
$route['(:any)'] = "controller/profile_guest/$1"; 

解釋:

路由是按照它們出現在您的routes.php文件的文件,所以如果你把$route['(:any)']在頂部,它會處理任何事情的順序處理。

假設你有一個位指示和裏面的功能,你需要執行它,例如:www.domain.com/contoller/function,不要去碰執行你的功能,因爲它會匹配這條路線$route['(:any)'],所以你需要定義的路由前$route['(:any)'] 例如:

$route['contoller/function'] = "controller/function" 
$route['(:any)'] = "controller/profile_guest/$1"; 

,做你所有的contollers,其功能同樣的事情,但你必須把$route['(:any)']在最後的路線。

+0

我在routes.php上只有一個路由,它在上面有更新。你能否澄清你的意思? – 2013-04-21 14:54:48

+0

我編輯我的答案。 – 2013-04-21 15:31:38

+0

請注意,在CI 3。0+,':any'將*不匹配斜槓,所以它只適用於一個URI段。 – 2013-04-21 23:57:31