Php 框架如何设置它们的路由?

Php 框架如何设置它们的路由?,php,apache,mod-rewrite,nginx,Php,Apache,Mod Rewrite,Nginx,在node.js中,服务器接收请求并执行某些操作。但是,当您请求特殊路由(/blog/title vs/server.PHP?loc=blog/title或其他什么)时,PHP框架的入口点在哪里 服务器如何知道在没有特殊配置学校的情况下(这是共享托管情况下的常见场景)可以到达那里?通常,需要将404重写到框架的index.php文件中进行处理 例如,Laravel的Apache httpd.conf/.htaccess配置包括: RewriteCond %{REQUEST_FILENAME} !

在node.js中,服务器接收请求并执行某些操作。但是,当您请求特殊路由(/blog/title vs/server.PHP?loc=blog/title或其他什么)时,PHP框架的入口点在哪里


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

通常,需要将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

通常,需要将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

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

注意:为了强制将所有请求传递到这些入口点,web服务器有一些常见的已知重写,用于将
URI
传递到
index.php

每个框架都有自己的方法,有些框架使用参数,如

/index.php/controller/action => /index.php?uri=/controller/action
然后在代码中,您可以使用
$\u get['uri']

另一种越来越流行的方法是使用查询字符串,如

/index.php/controller/action => /index.php?/controller/action
然后,这次要访问它,您需要使用
$\u服务器['QUERY\u STRING']
holder

获取
URI
后,您尝试使用路由规则(通常在config目录中的路由文件中定义),框架使用
/
拆分
URI
,并尝试根据结构在正确的位置查找控制器和操作,或者在特殊情况下查找一些特殊路由

例如,一个URL
/car/categories
将搜索
/app/controllers/car.php
,并在
car.php
中查找名为
function categories(){..}
的函数(请记住,我只是假设了一个随机结构,路径会因框架而异)

有些框架允许自定义路由,比如路由

/index.php/homepage => staticPagesController#homepageFunction
/index.php/about_us => staticPagesController#aboutusFunction
等等

如果你想更多地了解框架,我可以推荐阅读“Fabien Povertier”的作品,他是symfony和symfony2的创建者,也有点像symfony2的silex


他开始在

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

注意:为了强制将所有请求传递到这些入口点,web服务器有一些常见的已知重写,用于将
URI
传递到
index.php

每个框架都有自己的方法,有些框架使用参数,如

/index.php/controller/action => /index.php?uri=/controller/action
然后在代码中,您可以使用
$\u get['uri']

另一种越来越流行的方法是使用查询字符串,如

/index.php/controller/action => /index.php?/controller/action
然后,这次要访问它,您需要使用
$\u服务器['QUERY\u STRING']
holder

获取
URI
后,您尝试使用路由规则(通常在config目录中的路由文件中定义),框架使用
/
拆分
URI
,并尝试根据结构在正确的位置查找控制器和操作,或者在特殊情况下查找一些特殊路由

例如,一个URL
/car/categories
将搜索
/app/controllers/car.php
,并在
car.php
中查找名为
function categories(){..}
的函数(请记住,我只是假设了一个随机结构,路径会因框架而异)

有些框架允许自定义路由,比如路由

/index.php/homepage => staticPagesController#homepageFunction
/index.php/about_us => staticPagesController#aboutusFunction
等等

如果你想更多地了解框架,我可以推荐阅读“Fabien Povertier”的作品,他是symfony和symfony2的创建者,也有点像symfony2的silex


他开始在

中讨论路由,他们使用一种包罗万象的方法,并使用
.htaccess
(mod rewrite)重定向所有内容(不包括目录结构中的实际文件)到
index.php
,他们使用路由器组件将请求定向到相关的控制器/方法。我很乐意将这两个标记为正确答案。ceejayoz的回答似乎让我理解了Mohammad AbuShady更完整的回答。他们使用了一种包罗万象的方法,并使用
.htaccess
(mod rewrite)重定向所有内容(不包括目录结构中的实际文件)到
index.php
,他们使用路由器组件将请求定向到相关的控制器/方法。我很乐意将这两个标记为正确答案。看起来ceejayoz的答案让我理解了Mohammad AbuShady更完整的答案。根据我的经验,这是实现路由最简单的方法。Zend框架也依赖于此。()我能从他们的git回购中找到切入点吗?它是
public/index.php
。那么这些重写规则在服务器中只是标准的吗?他们知道将站点的根目录重写为public/index.php吗?不,您需要按照所选框架的安装说明进行操作。文件位置和机制因框架而异。根据我的经验,这是实现路由的最简单方法。Zend框架也依赖于此。()我能从他们的git回购中找到切入点吗?它是
public/index.php
。那么这些重写规则在服务器中只是标准的吗?他们知道将站点的根目录重写为public/index.php吗?不,您需要按照所选框架的安装说明进行操作。文件位置和机制可能因框架而异。Fabien系列为大+1。Fabien系列为大+1。