CodeIgniter中开启PATH_INFO时mod_rewrite隐藏index.php的问题

我曾专门写过一篇文章介绍如何使用mod_rewrite隐藏URL路径上的index.php,但在某种情况下如果你改变了URI寻址的方式,这份htaccess方案可能会失效。

在CodeIgniter中,当我将URI寻址方式从AUTO更改为PATH_INFO时,即:

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

注:PATH_INFO的开启,是因为我希望通过$_GET来取值,而不是系统默认的POST方式。

在此情况下如何仍然使用以上.htaccess方案,结果将是:index.php顺利隐藏,但主控制器并不能正确的获取值。

解决方案如下,就一步:

去掉以下重写规则中index.php后面的问号即可。

 RewriteRule ^(.*)$ /index.php?/$1 [L]

修改后的规则如下:

 RewriteRule ^(.*)$ /index.php/$1 [L]

其他地方不变。

Why?

第一句话在index.php后加问号的意思是告诉Apache的mod_rewrite模块,处理请求时自动去掉index.php后的GET字符串,这显然与我的意图相悖。

4 个评论 »
  1. 华晨 华晨
    August 10, 2009, 10:00 am

    谢谢你在我博客上的建议,我已经把那个广告改变过来了,呵呵。不是太好看,不过过几天我还要重新把程序写一下的,呵呵。

    还有,你博客上写的我很喜欢,会经常来看的,所以我把你加到我博客上的友情链接上了,这样访问方便一点。^_^

  2. Saturn Saturn
    August 10, 2009, 11:30 am

    @华晨

    :)

  3. Hex Hex
    August 12, 2009, 11:36 pm

    呵呵,偶然发现了这个基于 CI 的博客系统,很不错,我已经加入 CI 案例中了,希望博主不要介意,呵呵,并欢迎多来 CI 中国交流心得体会,谢谢。

  4. Saturn Saturn
    August 13, 2009, 6:29 am

    @Hex

    谢谢,当然不介意。

    等我有时间,会将程序整理出来,然后发布给大家参考。CI似乎在国内还不够热门,但实际上用它做敏捷开发真的很不错。

回应此文

你也可以选择引用此文章.