今天把做好的项目放到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; }