centos配置nginx支持pythinfo模式

在centos中安装了nginx和php7,为了使用thinkphp,thinkphp默认是pathinfo模式,因为pathinfo模式更友好,也有利于SEO。需要调整下让nginx支持pathinfo模式。

首先回顾下thinkphp支持的四种url模式:

  • 普通模式:http://serverName/appName/?m=module&a=action&id=1
  • pathinfo模式:http://serverName/appName/module/action/id/1/
  • rewrite模式
  • 兼容模式:普通模式和pathinfo模式的结合体http://serverName/appName/?s=/module/action/id/1/

废话不多说,直接上nginx配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
location ~ \.php {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot$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_FILENAME /data/wwwroot$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}

就可以了。特别要注意最前面location的.php后面不要有$符号。

最后

如果是在mac上做这个设置,还需要特别去设置下php.iniopen_basedir设置为你的根目录。

如果还有问题,就需要将php.inicgi.fixpathinfo这个配置设置为1.

have fun~ 🙂

码字辛苦,打赏个咖啡☕️可好?💘