Я установил nginx на Ubuntu Hardy и сразу понял, что скрипты PHP получают пустые массивы запросов, т.е. независимо от того, не поступало ли GET или POST, даже массив $ _REQUEST был пуст.
Когда я снова переключился на Apache, все было хорошо.
Версия установки nginx - 0.6.35-0ubuntu1.1 ~ hardy1, а PHP - PHP версии 5.2.4-2ubuntu5.10.
Что могло быть не так?
Это особенность try_files command
в nginx что query_string
не передается автоматически в перезаписанный файл, а должен передаваться явно. Из-за этого _$SERVER['QUERY_STRING']
всегда пусто, поэтому переменные $_REQUEST
и $_GET
тоже не ставятся.
В отличие от rewrite, $ args не сохраняется автоматически, если резервное копирование не является именованным расположением. Если вам нужно сохранить аргументы, вы должны сделать это явно:
try_files $uri $uri/ /index.php?q=$uri&$args;
или просто аргументами
try_files $uri $uri/ /index.php?$args;
Если вы хотите гарантировать получение исходных аргументов, используйте $query_string
который совпадает с $args
Кроме этого $query_string
только для чтения.
Проверьте, установлен ли это в вашем разделе "location" для вашего модуля fastcgi.
fastcgi_param QUERY_STRING $query_string;
Попробуйте проверить variable_order в конфигурационном файле php, используемом nginx.