Nginx,CodeIgniter,PATH_INFO

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的方法有二

  1. 如上所述,配置nginx支持PATH_INFO
  2. 在CI中修改/application/config/config.php,将
    $config['uri_protocol']	= 'AUTO';

    修改为

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