.htaccess — не удалось получить значение $ _REQUEST в переполнении стека

Я пытаюсь создать успокоительный 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']

1

Решение

Вы, вероятно, должны смотреть на PHP $_SERVER переменная вместо $_REQUEST,

$_SERVER['REQUEST_URI'] should give you the correct URI for /api/test

Бег var_dump на $ _SERVER дает вам больше информации о текущем запросе (и серверной среде, которая его обрабатывает)

Надеюсь это поможет!

1

Другие решения

Это, вероятно, происходит из-за вашего последнего правила, которое следует за вашим первым правилом. Измените свой код следующим образом:

<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>
0

По вопросам рекламы [email protected]