我们知道,配置伪静态,我们可以使用.htaccess这个文件来配置,当然要打开相应扩展,但是,有的时候我们是不能进行这些配置的,或者有的时候这样的配置并不方便,而且非常的不灵活,今天就总结一个用纯php代码来实现伪静态的方式。因为我近期想自己封装一个框架,参考了thinkphp等的伪静态实现方式,我们之前用的这个的框架其实非常好用,不过就是没有伪静态,于是我就打算加上这个伪静态功能。
要学习伪静态,首先我们要懂得url的访问规则,举个例子,如果我们访问http://local.nyyl.com/index.php/login/index,我们可以看到路径中有个index.php,其实就是有.这个符号,那么他访问的时候就是访问根目录下的index.php这个文件,后面的参数,如果没有配置伪静态,其实就没有意义,而如果我们访问http://local.nyyl.com/login/index,这样是比较规范的路径,那么他会先试图访问login这个目录,因为从表面上看,他应该是个目录形式,如果可以找到login这个目录,那么他就会再从里面找index这个目录,如果能找到,就访问里面的index.html或者index.htm或者index.php等,如果没有这样的文件,就会显示404,而如果我们在login下面配置了伪静态(要知道,伪静态是相对目录层级而言的,每个配置都是针对某个目录下起作用的),那么首先他还是按照上面说的方式找,而不同的是,如果他没有找到这个index目录,那么伪静态就会起作用,将这个index变为伪静态配置中所配置的参数。也就是说,伪静态的优先级是低于目录结构本身的,所以,我们配置伪静态的时候一定要考虑到目录名称,尽量要将伪静态的规则和目录名进行区别开,防止受目录本身结构的影响。下面就说一下我的这个php代码实现伪静态的方法,我们在网站根目录进行配置,并且以我的框架为例来说。
首先,这个框架和其他框架一样,所用的url访问,都是访问的一个类库中的某个方法,都是通过实例化某个类库的方法实现的,所以我们定义了一个m和一个a参数,来分别接收类名和方法名。然后通过new进行实例化,而我们要做伪静态当然我们要定义一下规则,我定义的规则就是,将路径中第一个参数付给$_GET['m'],将第二个参数付给$_GET['a'],然后后面的参数成对出现的付给$_GET的key和value,这样来达到虚拟接收get传值的方式,很多人对get传值可能并不理解,因为程序本身可以自动将?后接收的类似m=login值就会默认的付给$_GET,变成$_GET['m']=login这样,其实我们完全可以通过一些函数,获取一下url信息,进制自己组合$_GET;这个函数就是$_SERVER来看一下我的代码实现

define(‘URLROLE’, 1);定义url规则,1为伪静态,即http://local.nyyl.com/login/index这样;这里是可以省略index.php的

 

如果我们访问http://local.nyyl.com/login/index/name/zhang
就会输出:array(3) { ["m"]=> string(5) “index” ["a"]=> string(5) “index” ["name"]=> string(5) “zhang” }
这个代码是是根据我的框架要求来的,所以,如果大家要做,肯定根据需要进行修改一下即可。

本文链接:http://www.521php.com/archives/1203/

程序本天成,妙手偶得之!我们只是代码的搬运工!

转载请注明:http://www.521php.com/archives/1203/

目前有2 条留言

  1. 2013年04月11日 下午 8:01 阿呆博客   |  引用  |  #1     

    很抱歉配置失败

    • 2013年04月12日 上午 8:53 地狱中仰望天堂   |  引用  |  #2     

      我说了,里面的代码是我针对我的框架写的,如果你要用可能要适当修改,不过原理是一样的,如果是某个函数不支持,可以google一下,开一下扩展什么的,应该是可以的。

发表评论

昵称:

网址:

eg.博客主题调用的是Gravatar头像,你可以通过邮箱注册获得头像.
/ 快捷键:Ctrl+Enter