我正在使用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';
我不會聲稱知道這種變化不正是爲什麼它修復了這個問題。也許有人可以跟進解釋。
如果你看看CodeIgniter的文件(系統/核心/ URI.php)線87功能_fetch_uri_string(),你可以看到下自動設定的邏輯。簡而言之,它會檢查命令行(CLI)是否調用,並檢查PATH_INFO,QUERY_STRING等嘗試確定您可能需要的URI。我傾向於指定除AUTO之外的東西,所以你確切地知道該行爲是什麼。 – stellablue 2012-04-20 22:10:37