web-dev-qa-db-pt.com

retornar cabeçalho 404 com página 404

Nesta documentação

http://docs.joomla.org/Creating_a_Custom_404_Error_Page

há conselhos para redirecionar para uma página 404 personalizada redirecionando. Isso leva à exibição da página final em um código do cabeçalho 200.

No entanto, este artigo sobre ferramentas para webmasters

https://support.google.com/webmasters/answer/2409443?ctx=MCE&ctx=S4

requer que a página de erro 404 retorne um cabeçalho 404.

Eu tentei incluir o Joomla novamente na página de erro. Além de usar o curl para obter a página personalizada, há algo mais que eu possa fazer?

4
jdog

Isso é chamado de soft 404 enquanto você está redirecionando para um URL diferente. Portanto, a resposta 200 após o redirecionamento está correta, o que, sim, causa problemas para os robôs do mecanismo de pesquisa ao determinar se o conteúdo não foi encontrado :

Eu ia sugerir, forçando um 404 código de resposta para header chamada em error.php arquivo como este:

if (($this->error->getCode()) == '404') {
    header('Location: /index.php?option=com_content&view=article&id=75', true, 404);
    exit;
}

No entanto, isso não funcionará - principalmente porque o comportamento do navegador não deve ir mais longe ou indefinido tanto quanto eu sei (veja 4xx erros , 404 ) que entra em conflito com location . (Também alguns Chrome & IE's et al. Ignoram o conteúdo fornecido pelo servidor quando veem um código 404 e apresentam suas próprias "sugestões").

Portanto, parece que, para obter conteúdo personalizado de um artigo e reter um 404, você precisa obtê-lo e incluí-lo em sua página de erro (presumo que você queira fazer isso para obter seu modelo, estrutura de menu etc.) ).

2
Craig

Aqui está o que acabei colocando no topo do meu 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

Correção bastante fácil para URLs 404 personalizadas personalizadas do Joomla que não retornam o cabeçalho 404:

https://www.joomlashack.com/blog/joomla/custom-404/

Visível em: https://www.its-acoustique.fr/john-doe

0
Bruno