我正在使用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