Nginx 配置pathinfo

什么是PATHINFO?
例如 http://localhost/index.php/Home/Index/index/a/1/b/2?c=3中,注意c=3并不是pathinfo的一部分,它是一个get请求的一个参数

pathinfo值得是URL的路径实际上不存在的时候,apache或者Nginx等通过一定的手段将不存在的路径,都是实际不存在路径保存到环境变量$_SERVER['PATH_INFO']中,也可以转化为_GET['s']参数

也就是说当你访问TP项目的时候,你实际上访问的只是入口文件index.php,不管你后面有多长的路径,都是实际不存在的,转换成PATHINFO或$_GET['s']了而已。

那么THINKPHP就是根据PATHINFO,从中提取出 分组名,模块名 ,方法名 , 以及将剩余的部分转换成为$_GET变量

关于URL详细的解析流程,请看 ThinkPHP/Lib/Core/Dispatcher.class.php 核心类。

直接上代码,如下

server
    {
        listen 80;
        server_name api.xxx.com;                     #域名
        index index.html index.htm index.php;  #自动定位index.php
        root  /home/wwwroot/default/demo;      #项目目录
        location / {                                             #隐藏index.php配置
            if ( -f $request_filename) {                #如果是常规文件,不做处理
                break;
            }
            if ( !-e $request_filename) {             #如果访问的目录不存在,择把目录部分追加到index.php后面
                rewrite ^(.*)$ /index.php/$1 last;
                break;
            }
        }

        location ~ [^/]\.php(/|$)                         #pathinfo php配置
        {
            #try_files $uri =404;
            fastcgi_pass  unix:/tmp/php-cgi.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  /home/wwwroot/default/demo$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
        }

        location /nginx_status
        {
            stub_status on;
            access_log   off;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /home/wwwlogs/access.log;
    }

配置完之后,记得重启nginx服务器

你可能感兴趣的:(Nginx 配置pathinfo)