可能小伙伴们已经用过thinkPHP ,或者Laravel 之类的框架了;如果知道了这些框架的路由方式了, 感觉就好像打开的世界的大门了。
比如我们做一个登陆的接口:
liaosp.top/admin/login/logindo
我们就很明确了,在admin模块 控制层为login, 方法为logindo 执行这个方法。
那这样的路由功能怎么实现的呢?很简单。我们动手敲一下:
![](https://box.kancloud.cn/62b1aa1523046f485e6b4aa40cbbe1e1_481x111.png)
我们创建三个文件,分别是index.php admin.php home.php
如何通过访问index.php 访问另外两个php 文件的内容?
在admin.php 中写入
~~~
<?php
class admin{
public function index(){
echo 'admin->index';
}
}
~~~
home.php 写入
~~~
<?php
class home{
public function index(){
echo 'home->index';
}
}
~~~
在index.php 中写入:
~~~
<?php
$url = $_SERVER['PATH_INFO'];//获取url 参数的内容 比如我们输入:http://index.com/index.php/home/index 得到:/home/index
$ex = explode('/',$url);
//控制层:
if(empty($ex[1])){
$ex[1]= 'home';
}
$controller = $ex[1];
//方法层:
if(empty($ex[2])){
$ex[2] ='index';
}
$action = $ex[2];
require $controller.'.php';
$class = new $controller;
$class->$action();
~~~
这个时候我们就完成了,路由的分发了, 你可以在home中添加方法,用url 触发 localhost/home/test 就可以访问home 中的test () 方法
为了使url好看一点, 一般把index.php 文件隐藏:
下面是apche 的路由规则,把index.php 隐藏:
~~~
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>
~~~
放在与index.php 文件同级
这样我们访问url的时候就可以直接把url隐藏掉了
http://index.com/home/index
本章小节代码:
链接:https://pan.baidu.com/s/1o1g4Higqb6slDUH9_TrLPg 密码:jw5s