深度解析Nginx下的PHP框架路由实现-php教程

资源魔 38 0
一切的框架解决营业申请时,城市解决URL的门路局部,调配到指定的代码中行止理。
完成这一性能的要害就是猎取$_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框架

抱歉,评论功能暂时关闭!