Nginx下的PHP框架路由实现

更新日期: 2019-08-01阅读: 2.1k标签: url

所有的框架处理业务请求时,都会处理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


链接: https://www.fly63.com/article/detial/5079

静态网站如何获取Get参数,通过js获取url的参数数据的实现方式

不使用动态语言php,java等,直接通过js获取链接中传递的get数据的方法总结。javascript可以获取当前页面的url 只要对获取下来的url进行简单地解析即可。

短网址(short URL)系统的原理及其实现

做一个短链接生成器,可以将一个长链接缩短成一个短链接。就是把普通网址,转换成比较短的网址。好处不言而喻。短、字符少、美观、便于发布、传播。

从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)

在浏览器地址栏输入URL,浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤,如果资源未缓存,发起新请求,如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证...

html 获取url地址_js获取当前页面的url网址信息汇总

在WEB开发中,时常会用到javascript来获取当前页面的url网址信息,在这里是我的一些获取url信息的小总结。window.location.href(设置或获取整个 URL 为字符串),window.location.protocol(设置或获取 URL 的协议部分)

html中绝对路径和相对路径的区别?比较相对路径和绝对路径的优缺点

相对路径就是相对于当前文件的路径;可以防止被抄袭,如果网页位置改变,里面的链接还是指向正确的URL。在编码编写时不方便使用绝对路径,因为链接应该指向真正的域名,而不是开发站点。

qs.js_更好的处理url参数

一次接触qs这个库,是在使用axios时,用于给post方法编码,在使用过程中,接触到了一些不同的用法,写在这里分享一下:qs.parse、qs.stringify、排序、指定数组编码格式、处理json格式的参数

短网址(short URL)的实现_如何生成短链接URL?

什么是短链接 ?就是把普通网址,转换成比较短的网址。好处不言而喻:短、字符少、美观、便于发布、传播。所以如何来优雅的生成足够短的字符串唯一ID呢?

window.URL对象的使用方式

window对象的URL对象是专门用来将blob或者file读取成一个url的。这个url可以用在html的任何可以使用url的地方,比如img的src ; audio/video的src和source标签等。

PHP利用get_headers()函数判断远程的url地址是否有效

利用url访问远程的文件、图片、视频时有时需要请求前判断url地址是否有效。利用PHP自带的函数get_headers(),利用http返回值是否存在200状态,来判断url地址是否有效。

URL和URI的区别

URL的格式由下列三部分组成:协议(或称为服务方式);存有该资源的主机IP地址(有时也包括端口号);主机资源的具体地址,如目录和文件名等。URI,统一资源标识符:主机名。存放资源的自身的名称,由路径表示

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!