Dans cette documentation
http://docs.joomla.org/Creating_a_Custom_404_Error_Page
il est conseillé de rediriger vers une page 404 personnalisée en le redirigeant. Cela conduit à la page finale étant servie sur un code Header 200.
Cependant, cet article sur les outils pour les webmasters
https://support.google.com/webmasters/answer/2409443?ctx=MCE&ctx=S4
nécessite que la page d'erreur 404 renvoie un en-tête 404.
J'ai essayé d'inclure à nouveau Joomla à partir de la page d'erreur. À part utiliser curl pour obtenir la page personnalisée, puis-je faire autre chose?
Ceci s'appelle un soft 404
lorsque vous redirigez vers une autre URL. Donc, la réponse 200 après la redirection est correcte, ce qui pose effectivement des problèmes aux robots des moteurs de recherche pour déterminer si le contenu est introuvable :
J'allais suggérer, forçant un 404
code de réponse à header
appeler dans error.php
fichier comme ceci:
if (($this->error->getCode()) == '404') {
header('Location: /index.php?option=com_content&view=article&id=75', true, 404);
exit;
}
Cependant, cela ne fonctionnera pas - principalement parce que le comportement du navigateur ne doit pas aller plus loin ou non défini pour autant que je sache (voir Erreurs 4xx , 404 ) qui est en conflit avec location
. (De plus, certains Chrome et les IE et autres ignorent le contenu fourni par le serveur lorsqu'ils voient un code 404 et présentent leurs propres "suggestions").
Donc, il semblerait que pour obtenir le contenu personnalisé d’un article et conserver un 404, vous devez obtenir ce contenu et l’inclure dans votre page d’erreur (je suppose que vous voulez le faire afin que vous obteniez votre modèle, la structure de menus, etc. ).
Voici ce que j'ai fini par placer en haut de mon error.php
<?php
/**
* @package Joomla.Site
* @subpackage Template.system
* * @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
if (($this->error->getCode()) == '404') {
header('HTTP/1.0 404 Not Found');
$ch = curl_init( JURI::root() . '/404');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
echo curl_exec($ch);
exit;
}
Solution assez facile pour les URL 404 personnalisées personnalisées Joomla qui ne renvoient pas l'en-tête 404:
https://www.joomlashack.com/blog/joomla/custom-404/
Visible sur: https://www.its-acoustique.fr/john-doe