Domanda

Nginx + PHP (su fastCGI) funziona benissimo per me. Quando inserisco un percorso per un file PHP che non esiste, invece di ottenere la pagina di errore 404 predefinita (che viene fornita per qualsiasi file .html non valido), ottengo semplicemente un "Nessun file di input specificato. & Quot;.

Come posso personalizzare questa pagina di errore 404?

È stato utile?

Soluzione

Usi la proprietà error_page nella nginx config .

Ad esempio, se si intende impostare la pagina di errore 404 su /404.html , utilizzare

error_page 404 /404.html;

Impostare la pagina di errore 500 su /500.html è facile come:

error_page 500 /500.html;

Altri suggerimenti

Puoi impostare una pagina di errore personalizzata per ogni blocco di posizione in nginx.conf o una pagina di errore globale per il sito nel suo insieme.

Per reindirizzare a una semplice pagina 404 non trovata per una posizione specifica:

location /my_blog {
    error_page    404 /blog_article_not_found.html;
}

Una pagina 404 a livello di sito:

server {
    listen 80;
    error_page  404  /website_page_not_found.html;
    ...

Puoi aggiungere insieme codici di errore standard per avere un'unica pagina per diversi tipi di errori:

location /my_blog {
    error_page 500 502 503 504 /server_error.html
}

Per reindirizzare a un server totalmente diverso, supponendo che nella sezione http fosse stato definito un server upstream denominato server2:

upstream server2 {
    server 10.0.0.1:80;
}
server {
    location /my_blog {
        error_page    404 @try_server2;
    }
    location @try_server2 {
        proxy_pass http://server2;
    }

Il manuale può fornirti maggiori dettagli oppure puoi cercare google per i termini nginx.conf e error_page per esempi di vita reale sul web.

Stai attento con la sintassi! La Grande Tartaruga li ha usati in modo intercambiabile, ma:

error_page 404 = /404.html;

Restituirà la pagina 404.html con un codice di stato di 200 (perché = lo ha inoltrato a questa pagina)

error_page 404 /404.html;

Restituirà la pagina 404.html con un codice di errore 404 (originale).

https://serverfault.com/questions/295789/nginx -Ritorno-correct-headers-con-custom-error-documenti

La pagina "quot_errore" " Il parametro effettua un reindirizzamento, convertendo il metodo di richiesta in " GET " ;, non è una pagina di risposta personalizzata.

La soluzione più semplice è

     server{
         root /var/www/html;
         location ~ \.php {
            if (!-f $document_root/$fastcgi_script_name){
                return 404;
            }
            fastcgi_pass   127.0.0.1:9000;
            include fastcgi_params.default;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        }

A proposito, se vuoi che Nginx elabori lo stato 404 restituito dagli script PHP, devi aggiungere

[fastcgi_intercept_errors] [1] on;

per es.

     location ~ \.php {
            #...
            error_page  404   404.html;
            fastcgi_intercept_errors on;
         }

Queste risposte non sono più consigliate poiché try_files funziona più velocemente di se in questo contesto. Basta aggiungere try_files nel blocco posizione php per verificare se il file esiste, altrimenti restituire un 404.

location ~ \.php {
    try_files $uri =404;
    ...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top