1

我正在使用 CI 构建一个类似博客的网站。我正在使用HMVC 插件。我正在使用的模块是“/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';

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

4

1 回答 1

1

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

'AUTO' 选项是一个 CI 的东西,可以在不进行配置调整的情况下适用于不同的环境。

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

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

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

于 2012-04-19T23:43:06.633 回答