2012-04-19 55 views
1

我正在使用CI構建一個blog-ish站點。我正在使用HMVC plugin。我正在使用的模塊是「/ journal」。CodeIgniter + mod_rewrite URI縮短

單獨的文章可以在/ journal/article/ID/SLUG訪問。這工作正常,但我想使用mod_rewrite將URI縮短爲/ journal/ID/SLUG。

這裏是我的規則:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^journal/([0-9]+)(.*)$ index.php?/journal/article/$1$2 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 

爲了測試我使用/雜誌/ 2。

我知道規則是匹配的。例如,如果我將重定向更改爲http://google.com,我確實會將其重定向到Google。然而,使用規則時所寫它似乎被忽略,我收到了404不管我插嘴說。

我是不是做一些明顯的(或晦澀難懂的)錯誤?


編輯:我發表了這個問題後不久發佈的問題。我的規則確實是正確的,但我需要改變的config/config.php文件中的以下行:

$config['uri_protocol'] = 'AUTO'; 

$config['uri_protocol'] = 'PATH_INFO'; 

我不會聲稱知道這種變化不正是爲什麼它修復了這個問題。也許有人可以跟進解釋。

回答

1

的$配置[ 'uri_protocol']告訴CI其中$ _SERVER超全局使用,以確定您的應用程序的URI。 'PATH_INFO'選項使用$ _SERVER ['PATH_INFO']這是URL請求(不包含主機部分),請參閱php manual

「自動」選項是一個CI的東西,使適合不同的環境沒有配置調整。

就個人而言,我已經寫了幾PHP海基會控制器,我覺得好做所有的處理與PHP控制器(S)的腳本。

htaccess以及重寫可能會非常棘手,難以調試和一個錯字可以殺整個網站(哎喲)。我相信性能有小幅提升,但需要一些相當大的需求。無論如何,你正在轉向你的index.php控制器。我覺得幸福的代碼時,它是在一個地方;-)

好運吧......,希望我提供了一些有識之士您的問題。

+1

如果你看看CodeIgniter的文件(系統/核心/ URI.php)線87功能_fetch_uri_string(),你可以看到下自動設定的邏輯。簡而言之,它會檢查命令行(CLI)是否調用,並檢查PATH_INFO,QUERY_STRING等嘗試確定您可能需要的URI。我傾向於指定除AUTO之外的東西,所以你確切地知道該行爲是什麼。 – stellablue 2012-04-20 22:10:37