/ / "Не вказано вхідного файлу." Натомість помилка 404 в NGINX - php, nginx

"Не вказано вхідного файлу." Натомість помилка 404 в NGINX - php, nginx

Я стикаюся з такою ж страшною "Не вказаний вхідний файл". повідомлення в NGINX. Короткий опис того, що я намагаюся досягти, наведено нижче.

  1. Будь-яка існуюча URL-адреса, що закінчується розширенням ".php", повинна відображатися як помилка 404 [робота]
  2. Будь-яка існуюча URL-адреса без розширення ".php" виконає файл [працюючий]
  3. Будь-яка неіснуюча URL-адреса повинна кинути помилку 404 [не працює]. У цьому випадку помилка, накинута NGINX, є "Не вказано вхідного файлу".

Я відвідав і спробував реалізувати рішення, розташоване на Nginx + php fastcgi показує "Не вказано вхідного файлу". замість 404 але це не вирішило моєї проблеми.

Я дійсно не впевнений, як зробити 404 сторінку у випадку пункту 3.

Зміст файлу / etc / nginx / sites-enabled / default вказаний нижче

server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/example.com;
index index.php index.html index.htm;
server_name example.com;
error_page 404 /error/custom_404;

location / {
try_files $uri $uri/  @missing;
}

location ~ (.php$|myadmin) {
return 404;
}

location @missing {
fastcgi_param SCRIPT_FILENAME "$document_root$uri.php";
fastcgi_param PATH_TRANSLATED "$document_root$uri.php";
fastcgi_param QUERY_STRING    $args;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

location ~ /.ht {
deny all;
}
}

Пам'ятайте, що я просто новачок, а не фахівець. Будь-яка допомога оцінюється.

Відповіді:

1 для відповіді № 1

Твій location @missing Блок не робить нічого, щоб перевірити існування файлу, перш ніж передати його php-fpm. Додати перевірку наявності файлу:

location @missing {
if (!-f $document_root$uri.php) { return 404; }
...
}

Побачити цей документ для більше, і цієї обережності на використання if.