所有框架在处理业务请求时,都会对URL的路径部分进行处理,并赋值给指定的代码进行处理。实现这个功能的关键是获取$_SERVER全局变量中URL部分的数据。当请求的路径为http://test.com/article?id=1http://test.com/article/update?id=1支持以上url方式,不需要配置传递PATH_INFO变量,并且不需要配置伪静态去掉index.php最简单的nginx配置如下:server{listen80;服务器名称test.com;access_log/var/log/nginx/test.com.access.log主;根/家/测试;indexindex.htmlindex.htmindex.php;location/{try_files$uri$uri//index.php?q=$uri&$args;}位置~\.PHP{fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;包括fastcgi_params;}}这个配置有几个关键点需要注意:1.try_files必须配置在location块中,可以用来去掉index.php,如果不配置,必须加上/index.php/2.location~\.phpa到路径。是否以$结尾,有时候你会很困扰,重点看是否有try\_files,如果没有try\_files指令,那么一定不能以$结尾,这样的mode用/index。路径中的php/仍然可以访问b.如果有ry_files命令,而location~\.php$以$结尾,那么在php的location中无法匹配到/index.php/,但是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);//获取文章/更新
