Ваша конфигурация содержит следующее:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
А fastcgi_script_name
является ...
запрос URI или, если URI заканчивается косой чертой, запрос URI с именем индексного файла, настроенного директивой fastcgi_index, добавляемой к нему. Эта переменная может использоваться для установки параметров SCRIPT_FILENAME и PATH_TRANSLATED, которые определяют имя сценария в PHP. Например, для запроса «/ info /» со следующими директивами
Это означает, что когда URI запроса содержит .php
, он обрабатывается так, как если бы он был запросом к файлу PHP, и если этот файл PHP не существует, nginx возвращает ошибку - он никогда не достигает вашего приложения .
Решение состоит в том, чтобы заставить fastcgi_script_name
всегда равняться точке входа вашего приложения, в данном случае это index.php
. Вы можете редактировать его в своем блоке местоположения следующим образом:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
Ваше приложение теперь будет получать все запросы, включая те, которые имеют .php
в пути.