我正在使用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';
我不会声称确切知道该更改的作用或解决问题的原因。也许有人可以跟进解释。
答案 0 :(得分:1)
$ config ['uri_protocol']告诉CI哪个$ _SERVER超全局用于确定您的应用URI。 'PATH_INFO'选项使用$ _SERVER ['PATH_INFO']这是URL请求(没有主机部分),请参阅php manual。
“自动”选项是一种CI,可以在不进行配置调整的情况下适用于不同的环境。
就个人而言,我已经编写了一些PHP SEF控制器,我发现使用PHP控制器脚本进行所有处理会更好。
htaccess和重写可能很棘手,难以调试,一个拼写错误可以杀死整个网站(哎哟)。我确信性能上有很小的提升,但需要一些非常重要的要求。无论如何,你正在前往你的index.php控制器。当它在一个地方时,我发现更快乐的代码; - )
祝你好运......希望我能为你的问题提供一些见解。