我问这个的原因是因为PHP脚本不是路由吗?例如,如果您有article.php,那么您的路线就是http://mysite.com/article.php。
当路由已经作为简单文件存在时,为什么还要进一步抽象它的概念呢?
我问这个的原因是因为PHP脚本不是路由吗?例如,如果您有article.php,那么您的路线就是http://mysite.com/article.php。
当路由已经作为简单文件存在时,为什么还要进一步抽象它的概念呢?
Answers:
要了解路由器的功能,您必须首先了解什么是重写引擎。从维基百科文章(重点是我的):
重写引擎是用于修改Web URL外观(URL重写)的软件。重写的URL(有时称为短URL,奇特URL或SEF),用于提供指向网页的更短,更相关的链接。该技术在用于生成网页的文件和显示给World的URL之间增加了一定程度的分隔。
使用重写引擎时,URL和PHP脚本之间没有1:1的关联。同一篇文章中的一个示例:
http://example.com/wiki/index.php?title=Page_title
可以重写为:
使用该技术有多种好处。由于PHP通常与Apache紧密结合,因此最常用的重写引擎是Apache的mod_rewrite。
如果要重写URL,则需要某种路由,因为路由是获取URL,将其分解为组件并确定要调用的实际脚本的过程。Zend Framework 的标准路由器的文档页面将过程解释为:
路由是获取URI端点(位于基本URL之后的URI部分)并将其分解为参数以确定应该接收请求的模块,控制器和该控制器的操作的过程。
大多数PHP框架现在是基于MVC模式,并在一个MVC框架的过程是这样的*:
index.php
脚本,index.php
获取URL并开始路由过程。与控制器和方法匹配的参数通常使用通过正则表达式进行匹配,以能够处理复杂的动态路由模式(称为路由)。可以在CodeIgniter的URI路由文档页面上找到路由的良好示例:
$ route ['journals'] =“博客”;
$ route ['blog / joe'] =“博客/用户/ 34”;
$ route ['product /(:any)'] =“目录/ product_lookup”;
$ route ['product /(:num)'] =“目录/ product_lookup_by_id / $ 1”;
所述$route
阵列保持图案作为键和最终的动作,如值controller/action_method/dynamic_parameter
的格式。
*这并不是为了描述规范的过程,而只是为了简化说明。