php-experts.org - développement php et internet » headers https://www.php-experts.org Ressources sur le développement internet, PHP/MySQL, Ajax, marketing online, référencement... Sat, 19 Jun 2010 14:23:03 +0000 http://wordpress.org/?v=2.9.2 en hourly 1 erreur 404, redirection 301: headers et codes de réponse HTTP courants https://www.php-experts.org/developpement-web/php-developpement-web/erreur-404-redirection-301-headers-et-codes-de-reponse-http-courants-24 https://www.php-experts.org/developpement-web/php-developpement-web/erreur-404-redirection-301-headers-et-codes-de-reponse-http-courants-24#comments Fri, 05 Sep 2008 09:47:44 +0000 Didier https://www.php-experts.org/?p=24 Lorsqu’on se connecte à une page Web, le client (navigateur) envoie une requête, auquel le serveur qui traite la réponse, en suivant le protocole HTTP, renvoie un code de traitement à 3 chiffres.
Ce code se situe sur la première ligne de la réponse, et est de la forme :

  1. HTTP/1.1 200 OK

. En php, la fonction php header() permet, depuis vos scripts, d’adapter le code que le serveur renvoie, afin de “forcer” le comportement du navigateur client.
Petit tour d’horizon des codes les plus répandus.

200 OK

Le code 200, c’est le Nirvana. Tout s’est bien passé, rien à signaler. C’est le code par défaut.

301 Moved Permanently (aka Redirect Permanent)

Le code 301 ou “redirection permanente” est très utilisé en référencement. Il signale au client (navigateur ou crawler de moteur de recherche) que la ressource demandée (document, image, etc) a été déplacée de manière définitive.
Imaginons que je renomme un dossier. En l’état, les moteurs de recherche enverront les internautes vers des pages qui n’existent plus (ils recevront donc une erreur 404 – document not found), et les éventuels liens entrants dont bénéficiaient mes pages sont perdus puisqu’ils pointent aussi dans le vide.
Avec une redirection permanente, les moteurs étant prévenus que le document a été déplacé, mettront leur index à jour pour envoyer les visiteurs directement sur la bonne URL. Dans le même temps, la popularité amenée par les liens entrant sera reportée sur les nouvelles pages.

302 Moved Temporarily

Proche de la Redirection 301, le code 302 indique qu’un document a été déplacé temporairement. Moteurs comme navigateurs téléchargeront donc le document à sa nouvelle adresse, mais les références futures se feront à l’URL habituelle.

304 Not Modified

Quand ils ont un document dans le cache, les navigateurs envoient un entête If-Modified-Since, qui comprend la date à laquelle ils ont téléchargé le document pour la dernière fois. Si le document n’a pas été modifié depuis, le serveur envoie un code de réponse 304, “non modifié”, afin que le navigateur évite de retélécharger un contenu qui est à jour dans son cache.

404 Not Found

Le document auquel l’utilisateur essaye d’accéder a été déplacé, supprimé, ou l’URL fournie est simplement incorrecte. Le serveur n’a donc rien à renvoyer. On peut configurer Apache, au niveau du Virtual Host (ou d’un .htaccess) pour qu’il renvoie, dans ce cas, un document précis, grâce à la directive ErrorDocument 404 /fichier.html . En cas d’erreur 404, c’est fichier.html qui sera servi. Cela peut (et devrait toujours) servir à envoyer une page 404 personnalisée, qui comprend au minimum un mini-plan du site, afin que l’internaute puisse continuer sa visite sur le site.

500 Internal Server Error

Le code 500, c’est la fin du monde. Le serveur n’a pas pu répondre à la requête, très souvent à cause d’une erreur de configuration. Donc, vérifiez d’abord votre .htaccess, il suffit d’un point-virgule qui traine pour que le serveur ne s’en sorte plus.

Fonction header

La fonction header() en PHP permet d’envoyer un code de réponse autre que le 200 habituel. Vu qu’elle modifie les entêtes, elle doit être utilisée AVANT qu’un caractère imprimable soit envoyé au client. Dans le cas contraire, un warning “headers already sent” sera généré. Voici, pour exemple, la syntaxe complète de l’utilisation de la fonction header() pour envoyer une redirection 301 propre:

  1. header("HTTP/1.1 301 Moved Permanently");
  2. header("Location: http://www.nouvelle-url.com/");
]]>
https://www.php-experts.org/developpement-web/php-developpement-web/erreur-404-redirection-301-headers-et-codes-de-reponse-http-courants-24/feed 5
Site multilingue: déterminer la langue du visiteur https://www.php-experts.org/developpement-web/php-developpement-web/site-multilingue-determiner-la-langue-du-visiteur-17 https://www.php-experts.org/developpement-web/php-developpement-web/site-multilingue-determiner-la-langue-du-visiteur-17#comments Wed, 13 Aug 2008 13:38:29 +0000 Didier https://www.php-experts.org/?p=17 Sur les sites qui sont disponibles en plusieurs langues, il est fréquent de trouver une page “d’accueil” comportant plusieurs drapeaux ou un quelconque moyen de choisir son langage que l’on veut voir affiché. Cette pratique, aussi mauvaise pour le référencement qu’en termes d’ergonomie, peut facilement être évitée grâce au header “Accept-Language”.

Lors de chaque requête vers un serveur HTTP, le navigateur de l’internaute envoie un header “Accept-Language” contenant les langages qu’il accepte (ses favoris), dans l’ordre de préférence. Par exemple, chez moi, sa valeur est : “Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3″ (le q est un quality factor si on en croit la RFC 2616, on peut ne pas s’en occuper dans l’utilisation qui nous concerne)

Imaginons qu’on aie un site existant en français et anglais, avec un répertoire par version, placé à la racine (Encore une fois, je schématise, merci de ne pas trop m’en tenir rigueur… même remarque pour les noms des variables ci-dessous).

Plaçons le script PHP suivant sur la fameuse “page d’accueil” (qui est tout sauf accueillante) de notre site multilingue:

  1. $langagesSite = array(‘en’ => ‘English’, ‘fr’ => ‘Français’);
  2. $langageDefaut = ‘fr’;
  3. $langagesClient = split ([,;]‘, $_SERVER[‘HTTP_ACCEPT_LANGUAGE’]);
  4. $selected = null;
  5. foreach($langagesClient as $l) {
  6.       if (isset($langagesSite[$l]) && $selected == null) {
  7.            $selected = $l;
  8.       }
  9. }
  10. if ($selected == null) {
  11. $selected = $langageDefaut;
  12. }
  13. header(’Location:/’.$selected, true, 301);
  14. die();

Voyons ce qu’il se passe: on liste les langues disponibles pour le site (ligne 1), on détermine une langue comme étant celle par défaut (ligne 2), puis on récupère les langues que le visiteur a déclarées comme étant “recevables”. On parcourt cette liste à la recherche d’une correspondance… Dès qu’on l’obtient, on l’affecte à $selected, ce qui court-circuite les tests suivants. Dans le cas où on n’aurait aucune correspondance (si le visiteur demande du russe et/ou du chinois sur un site en anglais et français), on reprend la valeur de la langue par défaut.
Une fois cette affectation faite, on renvoie le visiteur, à l’aide d’une redirection 301 ou “redirection permanente”, vers le répertoire approprié.
Et dans le cas où le visiteur n’aurait pas envoyé l’entête magique dans sa requête (c’est le cas des crawlers des moteurs de recherche, en particulier de GoogleBot), la langue par défaut sert de

]]>
https://www.php-experts.org/developpement-web/php-developpement-web/site-multilingue-determiner-la-langue-du-visiteur-17/feed 9