CodeIgniter + mod_rewrite URI缩短

时间:2012-04-19 21:15:53

标签: .htaccess codeigniter mod-rewrite hmvc

我正在使用CI构建一个博客网站。我正在使用HMVC plugin。我工作的模块是“/ journal”。

可在/ 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

我正在使用/ journal / 2进行测试。

我知道规则是匹配的。例如,如果我将重定向更改为http://google.com,我确实会被重定向到Google。但是,当使用写入的规则时,它似乎被忽略了,无论我放入什么,我都会得到404.

我是否犯了一些明显(或神秘)的错误?


编辑:我在发布问题后不久就发现了这一点。我的规则确实是正确的,但我需要在config / config.php中更改以下行:

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

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

我不会声称确切知道该更改的作用或解决问题的原因。也许有人可以跟进解释。

1 个答案:

答案 0 :(得分:1)

$ config ['uri_protocol']告诉CI哪个$ _SERVER超全局用于确定您的应用URI。 'PATH_INFO'选项使用$ _SERVER ['PATH_INFO']这是URL请求(没有主机部分),请参阅php manual

“自动”选项是一种CI,可以在不进行配置调整的情况下适用于不同的环境。

就个人而言,我已经编写了一些PHP SEF控制器,我发现使用PHP控制器脚本进行所有处理会更好。

htaccess和重写可能很棘手,难以调试,一个拼写错误可以杀死整个网站(哎哟)。我确信性能上有很小的提升,但需要一些非常重要的要求。无论如何,你正在前往你的index.php控制器。当它在一个地方时,我发现更快乐的代码; - )

祝你好运......希望我能为你的问题提供一些见解。