我试图创建一个宁静的api唯一的问题是我无法获得$ _REQUEST值。相同的代码在localhost上工作正常,但在服务器上却没有。这可能是由于我的htaccess代码而发生的。当url processApi
的api调用是被调用的函数并找出url调用此api的哪个函数时
例如 http://www.domain.com/file.php/api/test
现在我试图调用test
类中的api
函数
htaccess代码重定向我的网址
api
类中的第一个函数是processApi
,检查是否存在测试函数
但在processApi
函数内,$ _REQUEST值为null
这是在服务器上发生的,但在localhost上它可以正常工作
这是htaccess代码
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ file.php?request=$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ file.php [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ file.php [QSA,NC,L]
</IfModule>
这是api代码
class API extends REST
{
private $db = NULL;
public function __construct()
{
parent::__construct();
}
public function processApi()
{
$func = strtolower(trim(str_replace("api/","",$_REQUEST['request'])));
if((int)method_exists($this,$func) > 0)
{
$this->$func();
}
else
{
$error = array('status' => '402', "msg" => 'function not exist');
$this->response($this->json($error), 402);
}
}
}
$api = new API;
$api->processApi();
通过将此代码运行到服务器上我得到了
{"status":"402","msg":"function not exist"}
仅因为$ _REQUEST [&#39;请求&#39;]为空
请指出我为什么$_REQUEST['request']
= null。我的htaccess代码是否在$_REQUEST['request']
答案 0 :(得分:1)
你应该看看PHP的$_SERVER
变量而不是$_REQUEST
。
$_SERVER['REQUEST_URI'] should give you the correct URI for /api/test
在$ _SERVER上运行var_dump
可以获得有关当前请求(以及正在处理它的服务器环境)的更多信息。
希望这有帮助!
答案 1 :(得分:0)
这可能是由于你的第一条规则之后运行的最后一条规则而发生的。像这样更改你的代码:
<IfModule mod_rewrite.c>
RewriteEngine On
# skip after rewriting first time
RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule ^ - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ file.php?request=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule . file.php [L]
</IfModule>