如何在nginx环境中启用php的pathinfo URL模式[修正]
作者:csuper
发表于:2017-10-25
我们在安装lnmp一键安装的时候,一般都没有开启pathinfo访问模式
![如何在nginx环境中启用php的pathinfo URL模式[修正]](/zb_users/upload/auto_pic/761.jpg)
这种模式在比较多的框架中用到,比如国人的ThinkPHP,还比如C写的Yaf也用到,不支持就比较可惜了。
pathinfo的原理就是将index.php/xxxx/xxx类似的网址当做php来执行,并且需要将xxx/xxx写入到$_SERVER[‘PATH_INFO’]中
这个是lnmp.org(我装的就是这个,所以我以这个为例子)开出来的虚拟机的配置中的一段(vhost/***.conf),修改nginx配置文件也是这样修改
location ~ .*\.(php|php5)?$ { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fcgi.conf; }
大家明显看到,location中的正则中,写了一个$,悲剧了,表示就此结束(?表示前面的php只匹配一次,这个只是随便提提)
最终,应该如此处理(location那行也修改了,因为我没有用到php5处理):
if (!-e $request_filename) { rewrite ^\/([^\.]*)$ /index.php/$1 last; break; } location ~ \.php { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fcgi.conf; set $path_info ""; set $real_script_name $fastcgi_script_name; if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { set $real_script_name $1; set $path_info $2; } fastcgi_param SCRIPT_FILENAME $document_root$real_script_name; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info; }
后面的部分处理我是参考的网络上搜索到的文档,我特意带注释版告诉大家,这是别人没有说的
这是别人没有说的
location ~ \.php { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fcgi.conf; set $path_info "";#初始化一个变量 set $real_script_name $fastcgi_script_name;#初始化一个变量,并且获取到一个原始赋值 if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {#检测如果.php后面还存在/开始参数,将参数处理 set $real_script_name $1;#将第一个正则子串匹配到的赋值 set $path_info $2;#将第二个正则子串匹配到的赋值 } fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;#修改SCRIPT_FILENAME值 fastcgi_param SCRIPT_NAME $real_script_name;#修改SCRIPT_NAME值 fastcgi_param PATH_INFO $path_info;#修改PATH_INFO值 #上述三个赋值都是replace into的模式,这些值都是写在fcgi.conf中 }
版权声明
本文仅代表作者观点,不代表Csuper立场。
本文系作者授权百度百家发表,未经许可,不得转载。