假设有这样的一个访问地址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} !-d
与RewriteCond %{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