1.什么是PATH_INFO?
PATH_INFO是一个CGI 1.1的标准,经常用来做为传参载体.
例如www.coderaladdin.com/test.php,并且test.php这个文件存在.当服务器接收这样的请求www.coderaladdin.com/test.php/path/info,那么PATH_INFO的值就是/path/info.
2.Nginx中的PATH_INFO
ngxin中默认配置中式没有PATH_INFO的设置的,在默认配置下,接收到如上请求是则会报404,那么如何解决这个问题呢,网上有多种方法可以参考,nginx官方的方法是通过fastcgi_split_path_info 来配置PATH_INFO
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
默认配置中的
location ~ .php$ { …… }
要记得改成
location ~ .php { …… }
3.CodeIgniter中的路由原理
具体路由原理不详述,只说在lnmp中CI能够正常使用rewrite的方法有二
- 如上所述,配置nginx支持PATH_INFO
- 在CI中修改/application/config/config.php,将
$config['uri_protocol'] = 'AUTO';
修改为
$config['uri_protocol'] = 'REQUEST_URI';