Архив

Request uri в nginx

Второй раз натыкаюсь.

В первый раз я не мог понять почему на php скрипт приходил GET запрос, хотя я отправлял POST и при этом массив был пустой, но при просмотре php://input нужные мне переменные были видны.

Тут ситуация была простой, но не очевидной, при запросе, я не попадал в нужный location и nginx успешно отправлял меня на @404, в следствие чего, php получал уже GET запрос.

Сейчас, эта фича, помогает работать с ssi включениями, т.к. при сборе "блоков" страницы у нас есть возможность получить оригинальный URL и добраться до нужных нам GET параметров.

Из доков nginx:

$request_uri - эта переменная равна полному первоначальному URI вместе с аргументами;

Пример, вывод $_SERVER из подключенного ssi блока:

  • [QUERY_STRING] => do=search&action=search
  • [REQUEST_URI] => /?q=творог&lr=213

Что бы получить нужный нам фэйковый $_GET, можно сделать что-нибудь типо этого:

parse_str( str_replace('/?', '', getenv('REQUEST_URI') ), $original_get );

Другие статьи в блоге:

⟵ Хитрожопые инкорпорейтед
PHP - Переворот числа ⟶