手记

PHP 写一个简单的路由

假设有这样的一个访问地址
http://localhost/user/login
如何让它路由到user控制器,的login方法呢?类似于
http://localhost/index.php ? controller=user & action=login

Just do it

首先呢,像http://localhost/user/login的路径,它对应的网站根目录下并没有这样的资源,是通过一定规则解释出来的,称为伪静态。

第一步

在Server应用的配置文件中,开启Rewrite重写模块。比如主流的nginx、apache都支持该模块。

第二步

在index.php的目录下,创建一个.htaccess文件,注意,没有文件名。这个文件是Rewrite可识别的分布式配置文件,内容可以为:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9/]*)$ index.php/$1

解释一下,
第一行,RewriteEngine On:开启重写
第二、三行,RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-f:如果不存在该目录或文件,才走下一条规则
第四行,RewriteRule ^([a-zA-Z0-9/]*)$ index.php/$1:把localhost后面的路径user/login丢给index.php去处理,即路径重写为index.php/user/login

第三步

index.php中,路径即可通过取出 $_SERVER['REQUEST_URI'],按照自己的规则,分割字符串,得到想要的路由参数。

比如上面的例子,按照/controller/action分割的话,那么controller=user、action=logIn

$c = new $controller();
$c->$action();

其实也挺简单的~



作者:夏镇冰茶
链接:https://www.jianshu.com/p/d7c1083110ff


1人推荐
随时随地看视频
慕课网APP