今天把ci项目放到服务器上的时候,页面无法路由,不是404就是欢迎页面,很烦。在网上找了很多方法,大部分都不全面或者不太好用,有的只是一行代码,看不懂。刚工作了几个小时,终于路由到了页面。标记在这里。服务器环境Debian9.064位nginx1.13.5PHP/7.1.10CodeIgniter3.1.6nginx报404错误因为默认的Nginx不支持pathinfo的格式,当你在浏览器中输入http:xxx.xxx.comindex.phppageshome时,Nginx会认为你要访问index.php目录下pages文件夹中的home,所以会报404notfound错误。解决方案解决方案是修改nginx.conf文件,下面是我的配置:location/{roothtml;indexindex.htmlindex.htm;try_files$uri$uri//index.php;}#error_page404/404.html;#将服务器错误页面重定向到静态页面/50x.html#error_page500502503504/50x.html;location=/50x.html{根html;}#将PHP脚本代理到侦听127.0.0.1:80的Apache##location~\.php${#proxy_passhttp://127.0.0.1;#}#将PHP脚本传递给侦听127.0.0.1:9000的FastCGI服务器#location~\.php${roothtml;fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME/$document_root$fastcgi_script_name;包括fastcgi_params;}主要是加一行try_files$uri$uri//index.php;具体的原理我不是很明白。这大致就像重定向。我懒得搞科学了。无论如何,我知道添加这一行会使它易于使用。然后修改php支持pathinfo,找到php的php.ini文件(可能在php安装目录下etc目录也可能在lib文件夹下,看自己配置),搜索:cgi.fix_pathinfo发布注释,和设置为1:cgi.fix_pathinfo=1然后在CI应用下的config/config.conf文件中修改三个参数:$config['base_url']='http://1.abc.com/';$config['index_page']='';$config['uri_protocol']='REQUEST_URI';这三个参数比较关键,第一个是web根目录对应的域名,index_page应该是",不是默认值'index.php'。上面设置ok后就不用写了url地址中的index.php是的,但是在我的项目中,虽然nginx路由没有报错,但是ci还是报错404,最后发现是文件名大小写的问题。。真是个坑。。controller的文件名不能小写。参考链接
