0

在 node.js 中,它是接受请求并执行某些操作的服务器。但是,当您请求特殊路由(/blog/title 与 /server.php?loc=blog/title 之类的)时,PHP 框架的入口点在哪里?

服务器如何知道在没有特殊配置学校的情况下去那里,这是共享托管情况下的常见场景?

4

2 回答 2

2

嗯,这很简单,首先使用单个入口点,即index.php该文件分析请求,并将其匹配到路由,然后匹配到控制器和操作

注意:为了强制将所有请求传递到这些入口点,Web 服务器有一些常见的已知重写以传递URIindex.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”的文章,他是symfonysymfony2的创建者,还有silex,有点像symfony2

他在第四章开始谈论路由

于 2013-09-11T20:45:13.803 回答
1

通常,将 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
于 2013-09-11T14:20:03.317 回答