在 node.js 中,它是接受请求并执行某些操作的服务器。但是,当您请求特殊路由(/blog/title 与 /server.php?loc=blog/title 之类的)时,PHP 框架的入口点在哪里?
服务器如何知道在没有特殊配置学校的情况下去那里,这是共享托管情况下的常见场景?
在 node.js 中,它是接受请求并执行某些操作的服务器。但是,当您请求特殊路由(/blog/title 与 /server.php?loc=blog/title 之类的)时,PHP 框架的入口点在哪里?
服务器如何知道在没有特殊配置学校的情况下去那里,这是共享托管情况下的常见场景?
嗯,这很简单,首先使用单个入口点,即index.php
该文件分析请求,并将其匹配到路由,然后匹配到控制器和操作
注意:为了强制将所有请求传递到这些入口点,Web 服务器有一些常见的已知重写以传递URI
到index.php
每个框架都有它的方法,有些使用参数,比如
/index.php/controller/action => /index.php?uri=/controller/action
然后在您的代码中,您可以使用$_GET['uri']
另一种越来越流行的方法是使用查询字符串,例如
/index.php/controller/action => /index.php?/controller/action
那么这次要访问它,您需要使用$_SERVER['QUERY_STRING']
持有人。
得到你之后URI
尝试使用路由规则,一般定义在config目录下的一个路由文件中,框架URI
通过使用拆分/
,尝试根据结构在合适的地方寻找控制器和动作,或者特殊的案例一些特殊的路线。
例如,对于一个 URL,/car/categories
将搜索并查找在内部/app/controllers/car.php
调用的函数(请记住,我只是假设一个随机结构,路径会因框架而异)。function categories(){..}
car.php
一些框架允许自定义路由,例如路由
/index.php/homepage => staticPagesController#homepageFunction
/index.php/about_us => staticPagesController#aboutusFunction
ETC..
如果你想更多地了解框架,我可以推荐阅读“Fabien Potencier”的文章,他是symfony和symfony2的创建者,还有silex,有点像symfony2
他在第四章开始谈论路由
通常,将 404 重写到框架的 index.php 文件以进行处理。
例如,Laravel 的 Apache httpd.conf/.htaccess 配置包括:
RewriteCond %{REQUEST_FILENAME} !-d # if not a directory
RewriteCond %{REQUEST_FILENAME} !-f # and if not a file
RewriteRule ^ index.php [L] # rewrite to index.php