background image

php 代码实现伪静态的方法

配置伪静态,我们可以使用

.htaccess 这个文件来配置,当然要打开相应扩展,但是,

有的时候我们是不能进行这些配置的,或者有的时候这样的配置并不方便,而且非常的不
灵活,本文就总结一个用纯

php 代码来实现伪静态的方式。

要学习伪静态,首先我们要懂得

url 的访问规则,举个例子,如果我们访问 一个地址

http://local.xxxl.com/index.php/login/index,我们可以看到路径中有个 index.php,其实就是有.这
个符号,那么他访问的时候就是访问根目录下的

index.php 这个文件,后面的参数,如果没

有配置伪静态,其实就没有意义,而如果我们访问

http://local.xxx.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.xxx.com/login/index 这

样;这里是可以省略

index.php 的

php 纯代码实现伪静态
if(1==URLROLE){

$nav=$_SERVER["REQUEST_URI"];
$script_name=$_SERVER["SCRIPT_NAME"];

$nav1=ereg_replace(".html","",substr(ereg_replace("$script_name","",urldecode($nav)),1));

$vars = @explode("/",$nav1);
$_url = array_chunk($vars,2);
$_GET['m']  =  $vars[0]?$vars[0]:'index';// 如 果 没 有 参 数 , 默 认 访 问 index 类 库 的

index 方法

$_GET['a'] = $vars[1]?$vars[1]:'index';
unset($_url[0]);
if($_url){

foreach($_url as $key=>$val){

@$_GET[$val[0]] = $val[1];

}