什么是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服务器