PHP сохраняет и передает $ _GET при перезаписи nginx

#php #nginx

#php #nginx

Вопрос:

Я использую эту перезапись:

 location = /example-page {
    try_files $uri /pages/example-page.php;
}
 

Эта перезапись $_GET по какой-то причине становится недоступной.

Когда я перехожу к example-page.php?test нему и использую print_r($_GET); его, он возвращает пустой массив. Однако, если я обращаюсь к файлу напрямую, как в /pages/example-page.php?test

Я получаю Array ( [test] => )

Мой вопрос в том, как я могу сделать так, чтобы все эти переменные, например $_GET , сохранялись, используя перезапись?

Комментарии:

1. Ваше try_files заявление лишает аргументации. Вы могли бы попробовать: try_files $uri /pages/example-page.php$is_args$args;

2. Хм, я вроде как хотел задать вопрос, который также отвечал бы на вопрос, какие изменения приведут к тому, что $_GET больше не будет доступен.

Ответ №1:

Исправленная перезапись, упомянутая в комментарии, хотя и будет работать, является наименее предпочтительной:

 location = /example-page {
    try_files $uri /pages/example-page.php$is_args$args;
}
 

Это неоптимально, потому что проверяет наличие файла <webroot>/example-page для каждого запроса к /example-page URI. Конечно же, этот файл изначально не существует. Таким образом, все проверки существования файла напрасны. Это, в зависимости от используемого трафика и диска, будет причиной проблем с производительностью.

В этом случае предпочтительнее избавиться try_files от, чтобы сократить stat системные вызовы. Просто сообщите NGINX, чтобы перенаправить запрос через PHP-FPM, а также какое имя файла PHP-FPM должен использовать для обработки:

 location = /example-page {
    fastcgi_param SCRIPT_FILENAME $document_root/pages/example-page.php;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php-fpm/example.com.sock;
}