我支持已部署的php应用程序,但它的工作方式对我来说是新的,我不知道它是如何做的。
基本上,使用类似路径的语法调用php方法来检索数据,例如:
<?php
// .....
$json = Request("http://_server/myfolder/abc/default/mymethod?data=something");
// Now $json var has some information.
?>
奇怪的是方法是如何构建的。在linux'server'中存在文件夹'myfolder'物理路径,你知道“... / apache / htdocs / myfolder /”但那就是IT。除此之外,代码的物理位置在不同的文件夹结构中,其中默认/ mymethod 完全匹配NO文件夹。
通过深入挖掘,我发现 mymethod 对应于位于以下位置的PHP方法:
apache/htdocs/myfolder/protected/modules/abc/controllers/defaultcontroller.php
在defaultcontroller.php里面有这样的东西:
<?php
// ....
Class DefaultController {
// ....
Public Function actionmymethod { // Notice the name of mymethod has 'action'
// more code
return $response;
}
}
?>
我100%确定在运行Request调用时触发了该方法,但是我不知道它是如何完成的。
我的问题是:
如何完成此设置?必须有一些与你有关的地方:
"http://_server/myfolder/abc/default/mymethod" with "actionmethod"
但在哪里以及如何?
我需要复制一下这个运行,所以我可以用这样的方式调用我的副本:
"http://_server/FOLDERCOPY/myfolder/abc/default/mymethod"
我已经复制了新结构,但在调用它时,服务器无法找到新的方法/路径:(
EDIT *** 我在位于/ myfolder /
的htaccess中找到了这个RewriteEngine on
RewriteBase /myfolder/
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
我在/ FOLDERCOPY / myfolder中修改了副本,但似乎无效:(
RewriteEngine on
RewriteBase /FOLDERCOPY/myfolder/
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
由于
答案 0 :(得分:0)
并非每个网址都以1:1的方式映射到服务器的文件系统。
显然,.../apache/htdocs/myfolder/
内应该有一个php脚本,很可能是index.php
。还应该有一些重写规则,可能在.htaccess
文件中,将http://_server/myfolder
下的网址转换为该脚本,将剩余部分转换为参数(query_string
或{{1 }})。
从这一点开始,php接管了。该结构意味着存在MVC框架。该框架似乎支持模块,其中一个是path_info
,调用abc
控制器的default
方法来处理请求。所以url结构是这样的:
mymethod
在http://server/site/module/controller/method?params
(.../apache/htdocs/myfolder/
?)下查找配置文件。它将包含有关模块位置和控制器映射(路由)的规则。然后,可能会有一个全局站点配置,以及每个模块一个...