Назад | Перейти на главную страницу

Nginx и PHP-FPM: параметры запроса не будут передаваться в PHP

В настоящее время я настраиваю машину для локальной разработки с помощью Vagrant. Все работает как надо, ожидайте, что параметры запроса не передаются в PHP на подстраницах.

Это значит на www.example.com/?a=b, параметр запроса доступен, но www.example.com/subpage/?a=b это не.

Общий ответ, который я нашел с помощью Google для этой проблемы, - это изменить try_files директива, но это не работает для меня. Я также проверил request_order & variables_order в php.ini - там все правильно настроено.

Это мой конфиг:

 server {
     listen                80;
     server_name           example.com www.example.com;
     root                  /var/www/public;

     location / {
         index   index.html index.htm index.php;
         try_files $uri $uri/ /index.php?$query_string;
         include /etc/nginx/fastcgi_params;
     }

     location ~ \.php$ {
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $request_filename;
         include /etc/nginx/fastcgi_params;
     }

     sendfile off;
}

Поскольку я не очень разбираюсь в настройке и администрировании серверов, я наткнулся на кирпичную стену, но вот несколько вещей, которые я также проверил:

Поскольку он работает, когда не на подстранице, я теперь подозреваю, что блоки местоположения не совпадают, но я действительно не понимаю, как это могло быть - пожалуйста, помогите.

Вам нужно использовать $ is_args для вопросительного знака и $ args или $ query_string для строки запроса после вопросительного знака.

вот последняя комбинация.

try_files $uri $uri/ /index.php$is_args$query_string;

Также убедитесь, что вы установили

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;

затем передайте его fastcgi;

fastcgi_pass 127.0.0.1:9000;

Строка запроса начинается с вопросительного знака.

Затем установите во втором блоке:

fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

удалять include /etc/nginx/fastcgi_params; в первом блоке, так как у вас нет fastcgi_pass директива здесь.