web-dev-qa-db-fra.com

en-tête ('HTTP / 1.0 404 Introuvable'); ne rien faire

J'ai un fichier 404.php dans le répertoire principal de mon site et j'utilisais header('Location: 404.php'); pendant un certain temps jusqu'à ce que quelqu'un dise que vous devriez utiliser header('HTTP/1.0 404 Not Found'); à la place. Je l'ai donc remplacé par celui-ci, puis j'ai ajouté: ErrorDocument 404 /404.php À mon fichier de configuration Apache et j'ai redémarré le serveur, mais cela ne fonctionne pas.

J'ai essayé différentes variantes, y compris ErrorDocument 404 404.php Et ErrorDocument 404 mywebite/404.php, Mais en vain.

Ce que je veux dire par ne fonctionne pas, c'est que plus tôt en utilisant header('Location: 404.php');, il serait redirigé vers le fichier 404.php mais lorsque je le remplace par header('HTTP/1.0 404 Not Found');, il semble que nous sautons simplement la ligne. et ne rien faire. Ce n’est certainement pas une redirection. J'appelle pour la redirection parce que si la valeur d'en-tête $ _GET n'est pas reconnue, la page doit 404.

48
John Smith

Non, cela fonctionne probablement. Ce n'est tout simplement pas facilement visible. Au lieu de seulement en utilisant l'appel header, essayez de faire cela, puis incluez 404.php, puis en appelant die.

Vous pouvez tester le fait que le HTTP/1.0 404 Not Found fonctionne en créant un PHP fichier nommé, disons, test.php avec ce contenu:

<?php

header("HTTP/1.0 404 Not Found");
echo "PHP continues.\n";
die();
echo "Not after a die, however.\n";

Puis visualiser le résultat avec curl -D /dev/stdout révèle:

HTTP/1.0 404 Not Found
Date: Mon, 04 Apr 2011 03:39:06 GMT
Server: Apache
X-Powered-By: PHP/5.3.2
Content-Length: 14
Connection: close
Content-Type: text/html

PHP continues.
77
icktoofay

Vous pouvez essayer de spécifier un code de réponse HTTP en utilisant un paramètre facultatif :

header('HTTP/1.0 404 Not Found', true, 404);
25
Jimmy Sawczuk

Utilisez ces codes pour 404 non trouvé.

if(strstr($_SERVER['REQUEST_URI'],'index.php')){
  header('HTTP/1.0 404 Not Found');
  readfile('404missing.html');
  exit();
}

404missing.html est votre page de conception Introuvable. (ça peut être .html ou .php)

7
Shiv Singh

je crois que ceci vous aidera

contenu de .htaccess

ErrorDocument 404 /error.php
ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 403 /error.php
ErrorDocument 405 /error.php
ErrorDocument 406 /error.php
ErrorDocument 409 /error.php
ErrorDocument 413 /error.php
ErrorDocument 414 /error.php
ErrorDocument 500 /error.php
ErrorDocument 501 /error.php

error.php et .htaccess doivent être placés dans le même répertoire [dans ce cas]

4
Sourav

Une autre raison peut être si vous ajoutez une balise HTML avant cette redirection. Regardez attentivement, vous pouvez laisser DOCTYPE ou tout commentaire HTML avant cette ligne.

2
Jeff_Alieffson

Pour PHP> = 5.4, vous pouvez utiliser une fonction plus simple comme celle-ci: http_response_code(404);Documentation PHP

0
Avior