2010-08-04 95 views
5

我安裝了Apache for Windows。我買了CodeIgniter Professional並下載了它們的源代碼。它說我應該把它的.htaccess放在網站的根目錄下,所以我做了。我將基本網址設置爲http://127.0.0.1/kids/,其中kids是網站的根文件夾。它顯示主頁很好。當我點擊一個鏈接時,它總是給出404錯誤。它說,「請求的URL /index.php/welcome/cat/2在此服務器上找不到。」我在目錄中嘗試了幾種可能的.htaccess,但沒有成功。在.htaccess中,它指示:Codeigniter不是正確的路由

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|captcha|css|js|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

解釋爲什麼它根本不起作用?我也檢查了configs.php,它似乎也沒關係。 config ['index_page']設置爲空白。我刪除了.htaccess文件,但仍然出現同樣的問題,只是它說:「在此服務器上未找到請求的URL/kids/welcome/cat/2。」

時間浪費在試圖讓它工作,我失去耐心。

下面是CodeIgniter的專業指導:

「爲了使這些文件夾訪問笨,你還需要建立在你的網站的根文件夾一個小的.htaccess文件下面是什麼.htaccess文件看起來像它基本上包含allmvs某些文件和文件夾要在網站上查看說明:

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|captcha|css|js|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

如果您熟悉Apache中的mod_rewrite,你會注意到,這條規則顯然是從消除的index.php任何目標的URL。下面當你配置CodeIgniter(和partic ularly config.php文件),你會明白爲什麼這是一個好主意。如果你不熟悉Apache中的mod_rewrite,不要被這個文件嚇倒。基本上,.htaccess文件提出了一些規則,其中一個從所有URL中刪除index.php。文件中的其他規則允許使用您將需要前進的各種其他文件夾(例如包含CSS,JavaScript,驗證碼文件和圖像的文件夾)。「

我按照指示進行操作......將如果我從根文件夾中刪除htaccess文件,它會顯示主頁。如果我添加htaccess文件,它會給出404錯誤。我移動了htaccess並且它沒有做任何事情。 。-route顯然,阿帕奇理解的htaccess否則將不顯示404錯誤

回答

8

您的路線可能無法正確解析,但我不確定。我會推薦以下步驟。

首先,我將廢除爲您的CodeIgniter路由使用PATH_INFO,因爲這不是必需的。您.htaccess文件改成這樣:

RewriteEngine On 

RewriteCond $0 !^(index\.php|images|captcha|css|js|robots\.txt) 
RewriteRule ^.*$ index.php [L] 

然後,在您的配置,確保$config['uri_protocol']設置爲AUTO(默認的,我相信)或REQUEST_URI

接下來,最有可能的原因是您的路線預計在URL上會出現尾部斜線。我不知道有足夠的瞭解笨知道在哪裏特定的設置配置,但可能會導致您的網址都必須具有以下配置指令結尾的斜線:

$config['url_suffix'] = "/"; 

編輯:確保mod_rewrite是工作,以及。試試這個在您的.htaccess文件的頂部,RewriteEngine指令後:

RewriteRule .* http://stackoverflow.com/ [L,R] 

如果您重定向到堆棧溢出,至少我們會知道的工作。如果沒有,您沒有收到500錯誤,所以問題在於.htaccess文件,在這種情況下,您應該確認您的服務器配置中相應的<Directory>條目對於您的站點位於磁盤上的位置已設置AllowOverride All

編輯:我應該更好地瞭解正斜槓,對此深表歉意。出現此問題的原因是mod_rewrite在每個目錄(.htaccess)上下文中的工作方式。

一旦您的URL被重寫,它將被檢查以確定mod_rewrite應該如何處理它。當您的網址指向本地資源幷包含前導斜槓時,mod_rewrite將保持原樣。如果沒有,則會添加每個目錄的前綴。

當它保持原樣時,在這種情況下,內部重定向到/index.php被假定爲來自主機(localhost)的完全限定URL。所以,請求的資源最終爲http://localhost/index.php。如果添加了每個目錄前綴,則重寫引擎中稍後的步驟會嘗試從路徑中刪除DocumentRoot(如果存在)。這留給我們/kids/index.php,然後傳遞給內部重定向,並按預期解決。

+0

無法正常工作。它也導致主頁顯示404錯誤。沒有你的指示...仍然沒有。 – netrox 2010-08-04 04:02:08

+0

@netrox嗯..有趣。看我的編輯,並希望我們可以從那裏工作。 – 2010-08-04 04:13:20

+0

蒂姆,感謝調試提示..我補充說這條線重新路由到stackoverflow,它沒有問題重定向。(很好的調試技巧!)明顯的apache理解htaccess文件。 – netrox 2010-08-04 04:18:30

0

試試這個:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^(.*)$ /index.php/$1 [NC,L] 

在T將這個他的孩子文件夾在index.php所在的位置。

+0

也不起作用。 :(我把它放在根文件夾中,然後點擊一個URL鏈接,我得到錯誤,說:「請求的URL /index.php/welcome/cart/3在該服務器上找不到」在FF。 – netrox 2010-08-04 02:22:17