web-dev-qa-db-fra.com

retourne l'en-tête 404 avec la page 404

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?

4
jdog

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

2
Craig

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;
}
2
jdog

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

0
Bruno