欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP 写一个简单的路由

程序员文章站 2022-06-03 20:18:16
...

假设有这样的一个访问地址
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();

其实也挺简单的~