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!

È stato utile?

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

  1. Determinare il contenuto non è valido
  2. Interruzione dell'esecuzione corrente
  3. Cancella qualsiasi output, se ce ne fosse.
  4. Invia l'intestazione 404 di stato
  5. 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");
?>

http://us.php.net/manual/en/function .header.php

È 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top