fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Итак, вы видите в журналах именно то, что вы настроили. Возможно, вам понадобится что-то вроде:
fastcgi_param SCRIPT_FILENAME /path/to/your/script.php;
Вы неправильно сконфигурировали try_files
. Как вы можете видеть в журнале php-fpm, точный URL-адрес передается на сервер PHP, который затем пытается получить файл с этим именем, которого, конечно, не существует.
Что вам нужно сделать, так это либо переписать, либо просто изменить переданный файл, а затем обработать данный URL в этом скрипте.
Адаптировано из моей собственной конфигурации nginx:
try_files $uri $uri/ index.php;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Эта конфигурация перенаправит все файлы .php в php_fpm. Если вы предпочитаете, чтобы файлы .php были вообще недоступны напрямую, вам нужно использовать internal , который скроет их от внешнего мира, хотя в большинстве случаев вам это не нужно.
При использовании этой конфигурации все запросы будут перенаправлены на index.php
. Чтобы извлечь данные о странице, которую хочет просмотреть пользователь, посмотрите PHP $ _ SERVER ['REQUEST_URI']
. Если вы будете разбивать эту строку на /
, имейте в виду, что первая запись массива будет пустой.