Version complète: sur le forum Webmaster Hub : Renvoyer la bonne entête http
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net
sparh
Bonjour,
je travail sur ma page d'erreur.

J'ai ajouté:
CODE
ErrorDocument 400 /erreur.php?erreur=400
ErrorDocument 401 /erreur.php?erreur=401
ErrorDocument 402 /erreur.php?erreur=402
ErrorDocument 403 /erreur.php?erreur=403
ErrorDocument 404 /erreur.php?erreur=404
ErrorDocument 405 /erreur.php?erreur=405
ErrorDocument 500 /erreur.php?erreur=500
ErrorDocument 501 /erreur.php?erreur=501
ErrorDocument 502 /erreur.php?erreur=502
ErrorDocument 503 /erreur.php?erreur=503
ErrorDocument 504 /erreur.php?erreur=504
ErrorDocument 505 /erreur.php?erreur=505


dans mon .htaccess et ça marche.
Mais quand je test l'entête http, c'est 200 ok.

Comment renvoyer une entête http en fonction de la variable $erreur que je récupère via GET ?

Merci d'avance wink.gif
pluriels
en utilisant la fonction header() ?
CODE
if(isset($_GET['erreur'])){
  switch($_GET['erreur']){
    case '501':
    header('le bon header de l'erreur');
    break;

    case '502':
    header('le bon header de l'erreur');
    break;

    // etc...

  }

}

un début de réponse, je n'ai pas vérifié
sparh
Oui merci la question était un peu conne!

Voici ce que me renvoi l'outil du hub:
-----------------------------------------------------------
URL: http://www.exemple.fr/zsegdvhgd
HTTP/1.0 302 Moved Temporarily
Date: Fri, 15 Feb 2008 20:20:53 GMT
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=3b48f5435ca0bffe66034cda3e8aec8d; path=/
Location: http://www.exemple.fr/erreur.php?erreur=404
Connection: close
Content-Type: text/html

Redirection vers :
URL: http://www.exemple.fr/erreur.php?erreur=404
HTTP/1.0 404 Not Found
Date: Fri, 15 Feb 2008 20:20:53 GMT
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=eb313b86d4d36b4418d3765237877114; path=/
Connection: close
Content-Type: text/html
------------------------------------------------------

Voilà le code que j'utilise dans ma page index.php
CODE
$test = mysql_num_rows($res_meta);
if($test == "0")
{
header("HTTP/1.0 404 Not Found");
header("Location: http://www.billionflash.fr/erreur.php?erreur=404");
die();
}


Pourquoi il y a d'abord une redirection avant l'erreur 4004 ?
C'est bon selon vous ?
Anonymus
.. Non, ton idée n'est pas bonne,
tu fais croire au moteur que la première est en 302. Alors qu'elle est en 404.
Ton problème est que pour l'exemple :
URL: http://www.exemple.fr/zsegdvhgd
Ca tombe bien sur un fichier, puisque t'es capable d'envoyer une 302.

Au lieu de renvoyer une 302, il te faut renvoyer une 404, mais à partir de ce fichier smile.gif

Sinon, erreur 500, c'est quand t'as plus de serveur biggrin.gif
Quand t'as plus d'serveur, t'as plus d'fichier non plus laugh.gif
sparh
Salut,
je vais ré expliquer mon problème depuis le début.

http://www.exemple.fr/zsegdvhgd correspond en fait à la page http://www.exemple.fr/index.php?var=zsegdvhgd

Quand on arrive sur ma page index.php je test l'existence de la variable zsegdvhgd (ou quoi que ce soit d'autre) dans ma base de onnée.
Si la variable existe dans la base c'est bon on affiche la page sinon erreur 404

Voici le code que j'utilise en haut de ma page index.php
CODE
$var = $_GET['var'];
//la requete pour tester l'existence de la variable dans la bdd

$test = mysql_num_rows($res_meta);
if($test == "0") //$var ne correspond a aucun enregistrement donc erreur 404
{
header("HTTP/1.0 404 Not Found");
header("Location: http://www.billionflash.fr/erreur.php?erreur=404");
die();
}


Avec ce système quand la variable n'existe pas on est bien redirigé vers ma page erreur.php?erreur.404
En haut de erreur.php j'ai:
CODE
if($_GET['erreur'] == "404")
{
header("HTTP/1.0 404 Not Found");
}


Mais quand je teste l'entête de ma page http://www.exemple.fr/zsegdvhgd (ou http://www.exemple.fr/index.php?var=zsegdvhgd )
c'est une 302 qui mène vers une 404 (cf résultat du test de l'entête http si dessus dans mon message précedent).

Ou est l'erreur ?
Dan
Je ne vois pas pourquoi tu envoies deux fois une entête 404 ???
Une fois dans index.php juste avant ta redirection, et une fois encore au début de erreur.php.

Il faut que tu supprimes l'un des deux. Je dirais celui de erreur.php !
Anonymus
Au lieu de faire une redirection avec 'header', tu devrais peut être faire un include, carrément.
Au moins, tu n'aurais pas ces problèmes (a priori..)
sparh
Bonjour,
j'y comprends plus rien:

J'ai donc 2 cas de figure:
- http://www.test.fr/zsegdvhgd (das ce cas la page existe, on arrive sur la page on test l'existence de la variable zsegdvhgd dans la base de donnée, si elle n'existe pas erreur 404!) --> a priori dans ce cas mon fichier htaccess ne sert à rien ?

- http://www.test.fr/forum/fgvc (dans ce cas la page n'existe vraiment pas, le fichier htaccess redirige donc automatiquement vers la page prévu à cet effet!)

Dans ce second cas, quand je teste l'entête http, j'ai:
CODE
URL: http://www.test.fr/forum/fgvc
HTTP/1.0 302 Found
Date: Sun, 17 Feb 2008 07:46:11 GMT
Server: Apache
Location: http://www.test.fr/erreur.php?erreur=404
Connection: close
Content-Type: text/html; charset=iso-8859-1

Redirection vers :
URL: http://www.test.fr/erreur.php?erreur=404
HTTP/1.0 200 OK
Date: Sun, 17 Feb 2008 07:46:11 GMT
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=4a2be2a7d301f36d139f3e61fe3214f8; path=/
Connection: close
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 6170


??? J'y comprends rien, pourquoi une redirection 302 ?? et pourquoi ma page erreur.php?erreur=404 renvoi finalement 200 ok !?
J'ai pourtant bien spécifié dans mon htaccess

ErrorDocument 404 http://www.test.fr/erreur.php?erreur=404
sparh
C'est bon j'ai réussis wink.gif

Alors pour le .htacces il ne fallait pas mettre le chemin complet de la page d'erreur
et dans mon fichier php au lieu de rediriger j'inclus ma page d'erreur (merci Anonymus) avec un die().

Merci à tous
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.