Frenlee

在nginx中开启pathinfo模式

最近将一个以前放在apache服务器下的一个项目转移到nginx服务器下,对于url模式,这个是个恶心处理的东西,在网上找了很多关于nginx pathinfo的相关配置,当然还是找到了相关有用的东西的,然后通过漫长的配置调试(原谅我是一个新手),终于成功的弄好了。

我用的环境是 php5-fpm + nginx

先来看看步骤吧

开启nginx pathinfo模式

先找到php配置文件 php.ini ,我的在 /etc/php5/fpm/ 目录下,然后将fix_pathinfo设置为开启,也就是值设置为1

1
cgi.fix_pathinfo=1

重启php5-fpm

1
sudo service php5-fpm restart

重启后就支持pathinfo 模式了,

接下来就得交给配置的了

nginx 下配置 pathinfo

官方是这样说的fastcgi_split_path_info

1
2
3
4
5
location ~ ^(.+\.php)(.*)$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}

其实通过这个配置我们可以在php中的全局变量 $_SERVER 中看到 PATH_INFO 这样一个数组元素。使用正则匹配到可执行文件之后的那部分作为pathinfo的值。

具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
#pathinfo模式的支持
location ~ ^(.+\.php)(.*)$ {

fastcgi_split_path_info ^(.+\.php)(.*)$;

fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}