Я пытаюсь создать успокоительный API, единственная проблема в том, что я не могу получить значение $ _REQUEST. тот же код прекрасно работает на локальном хосте, но не на сервере. Это, вероятно, происходит из-за моего кода htaccess. Когда API звонит по URL processApi
это функция, которая вызывается и узнать, какая функция этого API вызывается по URL
Например
http://www.domain.com/file.php/api/test
Сейчас пытаюсь позвонить test
функция, которая находится в api
учебный класс
htaccess код перенаправить мой URL
Первая функция внутри api
класс processApi
проверить или нет функцию проверки
Но внутри processApi
значение функции $ _REQUEST равно нулю
Это происходит на сервере, но на локальном хосте работает нормально
Это код 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 [‘request’] равно нулю
Пожалуйста, укажите мне, почему я получаю $_REQUEST['request']
= ноль Мой код htaccess дает правильное значение в $_REQUEST['request']
Вы, вероятно, должны смотреть на PHP $_SERVER
переменная вместо $_REQUEST
,
$_SERVER['REQUEST_URI'] should give you the correct URI for /api/test
Бег var_dump
на $ _SERVER дает вам больше информации о текущем запросе (и серверной среде, которая его обрабатывает)
Надеюсь это поможет!
Это, вероятно, происходит из-за вашего последнего правила, которое следует за вашим первым правилом. Измените свой код следующим образом:
<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>