2011-05-04 110 views
1

基本上一個控制器(controller/topics.php,http://192.168.1.50/topics)通過CI的index.php像它的假設那樣通過,另一個控制器(controller/user.php, http://192.168.1.50/user)由於一些奇怪的原因根本沒有通過(我在瀏覽器中得到一個404錯誤)。 CodeIgniter和/或Apache2正在做一些奇怪的事情,我無法弄清楚:'.../user'給了我Apache的404頁面,但'.../User'給了我CI的404頁面,這意味着CI抓取URI大寫控制器名稱,並忽略一些一些具有小寫控制器名稱的URI(然後Apache嘗試處理該URI)。在Codeigniter中,一些URIs通過index.php,一些不通過

任何想法爲什麼以及如何解決?

P.S. - 是的,我確實在CI的論壇上發佈了我的問題,但我沒有在他們的幫助下運氣。我在Linux發行版上運行CodeIgniter 2.0.2(帶有LAMP的Ubuntu 10.10)。

+0

奇怪的是'.../index.php/user'加載成功。因此,所有控制器(評論,家庭,主題,用戶,歡迎)與醜陋的索引。PHP /'加載成功(除了指向圖像的鏈接,CSS,js的東西現在打破了),但沒有醜陋的'index.php /'只有一些控制器加載成功(家,主題,歡迎)。 FRAK! – crashintoty 2011-05-04 19:06:18

+0

發佈你的.htaccess文件內容(隱藏任何重要的東西),你的route.config怎麼樣? – Jakub 2011-05-04 19:55:45

+0

http://pastebin.com/T7VjM6ba - 包含相關文件的相關片段(包括.htaccess和路由配置) – crashintoty 2011-05-04 22:29:49

回答

1

問題是重寫條件語法是說不要路由那些BEGIN與i,c,j或u而不是名稱爲i i,c,j或u的文件夾的文件夾。巧合的是我沒有加載的控制器名稱從i(idea)和u(user)開始。

我可以將我的靜態文件夾重命名爲全名(「上傳」而不是「u」)並更新重寫條件並解決此問題,但我想保留相同的名稱。任何人都知道重寫條件的正確語法來匹配確切的名稱(而不是像或開始)?

+0

請不要用另一個問題回答問題:) – Alexander 2013-03-01 19:16:56

0

檢查控制器的名字,最常見的事的人(我發現)做的是文件名複製自己的「主」控制器(說topics.php),並更名爲whatever.php

他們開始研究和控制器名稱保持「主題」。 404被拋出由於沒有被發現的控制器(未實際文件)

例如: class Blog extends CI_Controller {...

如果上面的代碼是在一個文件名爲stuff.php。你會得到一個404如果你打電話/stuff

+0

是的,控制器名稱與文件名匹配(當然,文件名只是小寫)。 – crashintoty 2011-05-04 18:58:06

0

昨天我遇到了類似的問題。默認的控制器可以有一個大寫的文件名,但是任何其他控制器在大寫時會產生一個404。這是在一個MAMP設置。

確保您的控制器也反映文件名。

class User extends CI_Controller { 
+0

這實際上是不正確的,你的控制器必須是首字母大寫! http://codeigniter.com/user_guide/general/controllers.html – Jakub 2011-05-04 18:35:32

+0

你是對的。我指的是文件名,並沒有大寫實際的聲明。接得好。謝謝。 – mhiggins 2011-05-04 18:42:48

+0

是的,我的控制器也是大寫的。 – crashintoty 2011-05-04 18:56:54

0

在你的htaccess ...而不是

RewriteRule ^(.*)$ /index.php/$1 [L]

嘗試

RewriteRule ^(.*)$ index.php/$1 [L]

,並在您的CI配置設置base_url的指示(包括尾部/!)

$config['base_url'] = 'http://www.site.com/';

應該這樣做。

+0

不,不要運氣:/ – crashintoty 2011-05-06 01:00:05