完成这一功用的症结就是猎取$_SERVER全局变量中关于URL部份的数据
当要求的途径为
http://test.com/article?id=1
http://test.com/article/update?id=1
支撑以上url形式,不需要设置通报PATH_INFO变量,也不需要设置伪静态去除index.php
最简朴的nginx设置以下:
server { listen 80; server_name test.com; access_log /var/log/nginx/test.com.access.log main; root /home/test; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } location ~ \.php { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
此设置有几个重点要关注:
1.try_files必需设置在location块中,这个能够用于撤除index.php,假如不设置,则必需在途径中加上/index.php/
2.location ~ \.php
a. 这里是不是以$末端,偶然会被搅扰,重点看清是不是存在try_files,假如不存在try_files指令,那末就肯定不要以$末端,如许在途径中运用带/index.php/的形式照样能够接见的
b. 假如存在try_files指令,而且location ~ \.php$ 这里是以$末端,那末/index.php/在php的location中就婚配不到,然则try_files又把参数重写到index.php?q=中了,因而如许也是能够接见到。
此时$_SERVER变量中,经常被各大框架或许自写顺序用作路由处置惩罚运用的变量值以下:
$_SERVER["PHP_SELF"]=>"/index.php",没有URL中的参数
$_SERVER["PATH_INFO"]=>,基础不存在,由于Nginx没有通报这个变量
$_SERVER["REQUEST_URI"]=>"/article/update?id=1",这个是完成路由的症结,参数都存在
PHP中比较兼容的处置惩罚是:
$uri=$_SERVER['REQUEST_URI']; $uri=str_replace("/index.php","",$uri); if(strpos($uri,"?")!==false){ $uri=substr($uri,0,strpos($uri,'?')); } $uri=trim($uri,'/'); var_dump($uri);//猎取到 article/update
引荐教程:PHP视频教程
以上就是深度剖析Nginx下的PHP框架路由完成的细致内容,更多请关注ki4网别的相干文章!