CodeIgniter中开启PATH_INFO时mod_rewrite隐藏index.php的问题
发布于: August 1, 2009, 10:48 am 分类: PHP/MySQL 作者: Saturn 4 个评论
我曾专门写过一篇文章介绍如何使用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字符串,这显然与我的意图相悖。