Вообще это защита от fix_pathinfoУ тебя же fastcgi_pass, при чём тут try_files ?
Оно дефолтом включено, вроде, ибо это поведение по стандарту cgi верное.А зачем fix_pathinfo держать включенным?
Мало ли какие глупости по дефолту включены.Оно дефолтом включено
Какое, делать stat()-брутфорс по всему пути до корня? Нет, такого в CGI стандарте нет. Стандарту CGI PHP вообще, строго говоря, не соответствует, ни в каком режиме.это поведение по стандарту cgi верное
Достаточно все четко написано - часть урла после программы. Конечно стандарт не пишет, как идентифицировать эту программу, но в общем варианта по сути два я вижу, или перебор от корня или патерн. Знаешь другие?Какое, делать stat()-брутфорс по всему пути до корня? Нет, такого в CGI стандарте нет. Стандарту CGI PHP вообще, строго говоря, не соответствует, ни в каком режиме.
Ты что-то пытаешься кому-то доказать, или что? Если да, скажи что и кому, а то я нить потерял.Часть урла после программы - это PATH_INFO, сама программа - это SCRIPT_NAME. А брут (несмотря на название настройки) делается как раз на имя скрипта, причем с учетом содержимого DOCUMENT_ROOT, что вообще не имеет отношения к CGI (как и PHP-шный SCRIPT_FILENAME). В стандарте не не предлагается брутфорсом находить где PATH_INFO, а где SCRIPT_NAME, ожидается, что вебсервер устанавливает эти переменные корректно.
Этот кусок говнокода (fix_pathinfo) в FPM попал копипастой из CGI, где делался в качестве костыля для кривых вебсерверов начала 2000х, и его надо просто выбросить. Но все боятся сломать совместимость с каким-нибудь говносервером.
По стандарту было бы правильно задавать docroot в конфиге fpm, а полный путь до скрипта получать его конкатенацией с SCRIPT_NAME.
И лучше его убрать, ибо он все-равно с try_files $uri =404; не будет работатьа fastcgi_split_path_info я просто скопипастил из старого конфига, он редко нужен
тут дело не в try_files, а в том, что по регулярке ~ \.php$ не зайдет запрос, в котором после расширения .php будет что-то еще, fastcgi_split_path_info ^(.+\.php)(/.+)$; всегда даст один результат,И лучше его убрать, ибо он все-равно с try_files $uri =404; не будет работать
/my/index.php/and/other.phpтут дело не в try_files, а в том, что по регулярке ~ \.php$ не зайдет запрос, в котором после расширения .php будет что-то еще, fastcgi_split_path_info ^(.+\.php)(/.+)$; всегда даст один результат,
забейте уже, это не для прода
В большинстве случаев современных программ так делать не надо. У тебя просто не должно быть *.php файлов в вебруте.в большинстве случаев надо просто писать location \.php$