完成这一性能的要害就是猎取$_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框架路由完成的具体内容,更多请存眷资源魔其它相干文章!
标签: 路由 php开发教程 php开发资料 php开发自学 nginx php框架
抱歉,评论功能暂时关闭!