#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;
}