Php 框架如何设置它们的路由?
在node.js中,服务器接收请求并执行某些操作。但是,当您请求特殊路由(/blog/title vs/server.PHP?loc=blog/title或其他什么)时,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} !
服务器如何知道在没有特殊配置学校的情况下(这是共享托管情况下的常见场景)可以到达那里?通常,需要将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。