Quando inviare il codice di stato HTTP?
-
03-07-2019 - |
Domanda
Attualmente nei miei script PHP, reindirizzo l'utente a una pagina di errore 404 non trovata personalizzata quando tenta di accedere a contenuti che non esistono o che non appartengono a quell'utente. In questo modo:
header('Location: http://www.mydomain.com/error/notfound/');
exit;
Mi rendo conto che la precedente chiamata header () invia un codice di stato di reindirizzamento 302 per impostazione predefinita.
Ciò che non capisco, tuttavia, è quando dovrei inviare il codice di stato 404 non trovato. Prima di reindirizzare l'utente? O quando visualizzo la pagina / error / notfound / ?
Grazie per l'aiuto!
Soluzione
Dovresti fare qualcosa del genere:
header("HTTP/1.0 404 Not Found");
include 'error.php';
die();
Altri suggerimenti
Non esegui affatto errori 404 come reindirizzamento.
Quello che vuoi davvero fare è inviare l'intestazione dello stato 404 e quindi sostituire l'output corrente con il corpo di una pagina 404.
Esistono vari modi per farlo e dipende in parte dalla struttura del tuo sito. Le applicazioni MVC in genere lo consegnano con un forward. Ho visto altri sistemi che generano un'eccezione e quindi il gestore delle eccezioni registrato si occupa di visualizzare la pagina 404.
Ad ogni modo, i passi da fare sono
- Determinare il contenuto non è valido
- Interruzione dell'esecuzione corrente
- Cancella qualsiasi output, se ce ne fosse.
- Invia l'intestazione 404 di stato
- Invia il contenuto della pagina 404
Non puoi usare 404 e Posizione: insieme. La posizione è valida solo per alcune risposte (201 e 3xx)
Puoi comunque inviare una pagina HTML personalizzata come corpo della tua risposta 404.
Da php.net:
Esistono due chiamate di intestazione per casi speciali. La prima è un'intestazione che inizia con la stringa " HTTP / " (il caso non è significativo), che verrà utilizzato per capire il codice di stato HTTP da inviare. Ad esempio, se Apache è stato configurato per utilizzare uno script PHP per gestire le richieste di file mancanti (utilizzando la direttiva ErrorDocument), è possibile assicurarsi che lo script generi il codice di stato corretto.
<?php
header("HTTP/1.0 404 Not Found");
?>
È necessario inviare un codice di stato HTTP 404. Browser e crawler lo capiscono. Potresti anche voler includere una pagina di errore più amichevole che spieghi cosa è successo, incluso un modulo per la ricerca nel tuo sito, collegamenti Soundex, ecc.
Un "reindirizzamento" e un "non trovato" sono concetti diversi.
Quale file è stato trovato?
http://www.mydomain.com/error/notfound/
o
http://www.mydomain.com/not_exist.html
Il " http://www.mydomain.com/not_exist.html " ; la pagina dovrebbe avere un'intestazione 404 E la "Pagina non trovata" contenuti.
Una correzione rapida potrebbe essere:
header("HTTP/1.0 404 Not Found");
readfile('http://www.mydomain.com/error/notfound/');
exit;
Ma questo richiede 2 richieste di apache ed è un po 'brutto.