zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    构造方法和析构方法调用上级同类方法的问题
    PHP中parent关键词
    PHP中访问控制修饰符
    PHP中继承
    PHP中this,self,parent的区别
    PHP中的构造方法和析构方法
    PHP中类中成员及常量
    怎样设计一个好的数据库
    PHP执行原理
    PHP对象在内存中的分配
  • 原文地址:https://www.cnblogs.com/phpjinggege/p/5973161.html
Copyright © 2011-2022 走看看