对于thinkphp框架项目的访问格式有多种,其中pathinfo是默认的基本访问格式,格式为:http://hostname:port/index.php/模块名/action名/参数1/参数1的值/
pathinfo其实就是一个参数,可以通过$_SERVER['PATH_INFO']获得,thinkphp框架通过解析它来找到对应的模块和方法。
apache服务器默认是支持pathinfo的,但是nginx服务器默认不支持这种格式,需要进行配置,配置方式如下:
以下是mac下的MNMP中的nginx配置
1. 找到ngingx的配置文件nginx.conf
在server里的location项,
修改前为:
server {
listen 7888;
server_name local.tpdemo.com;
root /Applications/MAMP/htdocs/thinkphp_demo/;
access_log /Applications/MAMP/logs/nginx_tpdemo_access.log;
error_log /Applications/MAMP/logs/nginx_tpdemo_error.log debug;
location / {
index index.html index.htm index.php;
location ~ \.php {
try_files $uri =404;
fastcgi_pass unix:/Applications/MAMP/Library/logs/fastcgi/nginxFastCGI.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
修改后为:
server {
listen 7888;
server_name local.tpdemo.com;
root /Applications/MAMP/htdocs/thinkphp_demo/;
access_log /Applications/MAMP/logs/nginx_tpdemo_access.log;
error_log /Applications/MAMP/logs/nginx_tpdemo_error.log debug;
location / {
index index.html index.htm index.php;
#重写隐藏掉index.php部分
#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
if (!-e $request_filename)
{
#地址作为将参数rewrite到index.php上。
rewrite ^/(.*)$ /index.php/$1;
#若是子目录则使用下面这句,将subdir改成目录名称即可。
#rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
}
location ~ \.php {
try_files $uri =404;
fastcgi_pass unix:/Applications/MAMP/Library/logs/fastcgi/nginxFastCGI.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
#定义变量 $path_info ,用于存放pathinfo信息
set $path_info "";
#定义变量 $real_script_name,用于存放真实地址
set $real_script_name $fastcgi_script_name;
#如果地址与引号内的正则表达式匹配
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
#将文件地址赋值给变量 $real_script_name
set $real_script_name $1;
#将文件地址后的参数赋值给变量 $path_info
set $path_info $2;
}
#配置fastcgi的一些参数
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
}
}
2. 编辑php.ini文件
注释掉配置项cgi.fix_pathinfo(前面加;)
3.重启phpcgi 和 nginx