2012-04-19 52 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