nginx 下开启pathinfo模式
前几天自己新弄了个服务器,nginx的环境, 看到thinkcmf的框架,下载下来准备研究下,安装完成后,发现 url 是 普通模式,然后我就按照那个手册去后台开启了pathinfo模式,这一改完蛋了,网站的url的确是改程pathinfo模式了,但是解析不了,点任何链接都是显示首页。(前后台都是这样,然后我重装了N次尝试找到原因)。后来大概百度找了N多,搞了快俩天。对于我这种搞后台的,对linux相关差不多是小白,这些配置我也不太懂,只能先记录下来以便以后再具体研究了,现总结下:
默认nginx是不开启pathinfo模式的,需要配置,首先去php.ini里把 cgi.fix_pathinfo开启 并设置为1(cgi.fix_pathinfo=1),重启php;
然后需要nginx.conf里配置东西 ,这个是我原配置。
然后找了段代码。我理解的意思是 把location相关的原代码全部删除掉,加上我找的这段代码,注意此时include 的 enable-php.conf也有location的相关配置(其他nginx系统可能也有类似的配置文件,打开都看看,我在这一开始没注意,不懂,没删除这段,坑了好久);找的代码
if (!-e $request_filename) { rewrite ^\/([^\.]*)$ /index.php/$1 last; break; } location ~ \.php { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf;#注意这里有的系统是fcgi.conf 实际就是nginx下的conf目录的文件 set $path_info "";#初始化一个变量 set $real_script_name $fastcgi_script_name;#初始化一个变量,并且获取到一个原始赋值 if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {#检测如果.php后面还存在/开始参数,将参数处理 set $real_script_name $1;#将第一个正则子串匹配到的赋值 set $path_info $2;#将第二个正则子串匹配到的赋值 } fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;#修改SCRIPT_FILENAME值 fastcgi_param SCRIPT_NAME $real_script_name;#修改SCRIPT_NAME值 fastcgi_param PATH_INFO $path_info;#修改PATH_INFO值 #上述三个赋值都是replace into的模式,这些值都是写在fcgi.conf中 }
最终配置结果
server { listen 80 ; #listen [::]:80 default_server ipv6only=on; server_name xxxx.com ; index index.html index.htm index.php; root /home/wwwroot/thinkcmf; #error_page 404 /404.html; if (!-e $request_filename) { rewrite ^\/([^\.]*)$ /index.php/$1 last; break; } location ~ \.php { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf;#注意这里有的系统是fcgi.conf 实际就是nginx下的conf目录的文件 set $path_info "";#初始化一个变量 set $real_script_name $fastcgi_script_name;#初始化一个变量,并且获取到一个原始赋值 if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {#检测如果.php后面还存在/开始参数,将参数处理 set $real_script_name $1;#将第一个正则子串匹配到的赋值 set $path_info $2;#将第二个正则子串匹配到的赋值 } fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;#修改SCRIPT_FILENAME值 fastcgi_param SCRIPT_NAME $real_script_name;#修改SCRIPT_NAME值 fastcgi_param PATH_INFO $path_info;#修改PATH_INFO值 #上述三个赋值都是replace into的模式,这些值都是写在fcgi.conf中 } access_log /home/wwwlogs/access.log access; }
重启nginx,网站正常。
对了,重要参考网址:https://my.oschina.net/longxuu/blog/190223