2017-03-23 5 views
1

Ich bin mit der gleichen gefürchteten "Keine Eingabedatei angegeben." Nachricht in NGINX. Eine kurze Beschreibung dessen, was ich zu erreichen versuche, ist unten angegeben."Keine Eingabedatei angegeben." Fehler statt 404 Fehler in NGINX

  1. Eine bestehende URL mit „.php“ Endung sollte als 404 Fehler zeigen [Arbeits]
  2. jede bestehende URL ohne Erweiterung „.php“ wird die Datei [Arbeits]
  3. Beliebig inexistent ausführen URL sollte 404-Fehler auslösen [funktioniert nicht]. In diesem Fall ist der von NGINX ausgelöste Fehler "Keine Eingabedatei angegeben".

Ich habe besucht und versucht, die Lösung bei Nginx + php fastcgi showing "No input file specified." instead of 404 zu implementieren, aber das hat mein Problem nicht gelöst.

Ich bin wirklich nicht sicher, wie 404-Seite bei Punkt machen 3.

Inhalt von/etc/nginx/sites-enabled/default Datei unter

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

gegeben Bitte halten Bedenke, dass ich nur Anfänger und kein Experte bin. Jede Hilfe wird geschätzt.

Antwort

1

Ihr location @missing Block überprüft die Existenz der Datei vor der Übergabe an php-fpm nicht. Fügen Sie einen Scheck für die Datei Existenz:

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

Siehe this document für mehr und this caution über die Verwendung von if.

+0

Das Hinzufügen von 'try_files $ uri.php = 404;' in dem fehlenden Block löst 404 Fehler für alle Anforderungen aus, die früher bedient wurden. try_files ist in einem anderen Block darüber vorhanden. – user4943000

+0

Sorry meine schlechte, 'try_files' ändert die URI. Antwort wurde aktualisiert, um stattdessen eine 'if'-Anweisung zu verwenden. –

+0

Vielen Dank @RichardSmith. Das war was ich brauchte. – user4943000

Verwandte Themen