liunx nginx 下CI访问 404 问题


今天把做好的项目放到Liunx服务器下,除首页以外全部部都报404的错误,在本地windows上测的好好的,怎么会出现这种问题呢,首先排除了文件大小写的问题,最终确定在nginx上,NGINX 默认不支持 PATH_INFO 模式,需要修改NGINX配置 让NGINX 来解析。在网上搜索到了几种方式,本人在这里总结一下。

第一种(并没有解决我的问题):

server {
        listen      80;
        server_name www.ci.com;
        index       index.php index.html index.htm;
        root        "/servers/apps/CI";
      location ~ \.php{
           fastcgi_pass 127.0.0.1:9000;
           fastcgi_index index.php;
            ##########################################pathinfo 模式
            set $path_info "";
            set $real_script_name $fastcgi_script_name;
            if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$"){
                 set $real_script_name $1;
                 set $path_info $2;
            }
            include fastcgi.conf;
            fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
            fastcgi_param SCRIPT_NAME $real_script_name;
            fastcgi_param PATH_INFO $path_info;
            ##########################################nginx支持pathinfo 模式的重点    

       }      
}

第二种(还是没有解决):

if (!-e $request_filename) {
 rewrite ^.*$ /index.php last;
 }

第三种(解决一部分,因为我后台路径是admin.php,index.php没事了,admin.php又不行了):

location / {
        root   /root/www;
        index  index.php;
        try_files $uri $uri/ /index.php?$uri&$args;
    }

第四种(成功解决了我的问题):

 location ~ \.php(.*)$ {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 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;
 include fastcgi_params;
 }