介绍
介绍
今天我们主要需要达到的目标就是解决路由模块的核心功能,实现资源路径的映射功能。要实现资源路径的映射就需要能够对资源路径映射的操作有控制权,需要获得资源路径映射的控制权就需要借助Apache的rewrite模块了。
Apache的rewrite模块是一个很厉害的模块,它实现在用户发起的请求达到服务器之后由服务器进行URI解析之前的资源映射的自定义处理机制。这使得我们可以建立一套非对称的资源映射规则,将用户请求的不同资源映射给同一个路由控制器来处理,这样我们就可以在处理用户请求这个环节大做文章了。
因为PHP和Apache是绝配,所以福哥假定大家的运行环境都是Apache了。如果哪位童鞋用的不是Apache的话,可以私下和福哥反馈,我们一起想解决方案。
rewrite
Apache是运行php语言的主流web服务器软件,Apache有很多模块,这些模块赋予了Apache非常多的特殊能力,其中一个非常实用的模块就是地址重写(rewrite)模块,这个模块可以将Apache对资源路径的映射的控制权交与我们自己来处理,这样我们就可以实现TFPHP的路由功能了。
打开配置文件,搜索“rewrite”模块,将模块前面的“#”去掉打开rewrite模块支持:
[root@dev httpd-2.4.46]# vi conf/httpd.conf
打开配置文件,搜索“Directory”,找到“/tongfu.net/web”的配置位置,将AllowOverride改为All:
[root@dev httpd-2.4.46]# vi conf/httpd.conf
重启Apache服务,这里会提示找不到tfphp目录,我们马上建立它
[root@tfdev httpd-2.4.46]# ./bin/apachectl restart AH00112: Warning: DocumentRoot [/tongfu.net/web/tfphp] does not exist
框架目录
我们框架的名称是TFPHP,所以建立目录 /tongfu.net/web/tfphp 作为我们框架的根目录。路由模块福哥认为属于系统级别的功能模块,所以福哥打算给放到System子目录下面。在路由模块建立对象名称TFRouter,保存php程序文件名称TFRouter.inc.php。
路由模块
现在我们就开始实现TFPHP的路由模块功能了,首先我们需要搭建一个调试环境,用来调试我们的路由功能。
配置rewrite规则
我们在tfphp目录下面建立一个“.htaccess”文件用来动态配置Apache服务器
在“.htaccess”里写下如下配置信息:
# the router of tfphp RewriteEngine On RewriteCond %{REQUEST_URI} !(\.(js|css|jpg|jpeg|pjpeg|png|gif|txt|ico))$ [NC] ### resource extension RewriteCond %{REQUEST_URI} !(TFRouteMap\.php|server\-status|server\-info) [NC] ### route script and server special RewriteRule ^(.*)$ /TFRouteMap.php?$1 [L]
路由入口程序
我们在tfphp根目录建立一个“TFRouteMap.php”文件用来处理资源路径的路由功能
在“TFRouteMap.php”里写下如下代码:
<?php var_dump($_SERVER['QUERY_STRING']);
测试
现在我们来测试一下路由模块的基本功能效果,随便访问一个网址,就可以在页面上打印出来网址的资源路径部分的内容。
就是说我们访问任何一个网址,如果网址资源路径不包含RewriteCond里面提到的内容的话,这个网址的资源路径就会被传递给TFRouteMap.php进行处理,也就是说这些网址都会映射到TFRouteMap.php这个集中处理的php程序上。
总结
今天我们给Apache配置了rewrite功能,利用rewrite功能我们将访问8068端口的所有请求都映射到了TFRouteMap.php这个路由入口程序上。也就是说路由模块的第一步我们已经完成了,接下来我们就要开始设计TFPHP的路由逻辑了,我们需要定义TFPHP的路由对象,通过它实现将资源路径映射到控制器对象的目的。
下一课福哥将带着大家设计TFRouter对象,完成路由功能的最后一个环节,资源路径与控制器对象的映射功能。
P.S.
微信公众号的文章发出去之后是不能编辑的,但是福哥偶尔会修复一些描述不到位、示例不正确、结构不清晰等等的文章错误,这些只能在网站上才能看到最新版本内容,望大家知晓~~