Posso fazer o Apache ErrorDocument retornar 404 em vez de 301?

Posso fazer o Apache ErrorDocument retornar 404 em vez de 301?

No meu .htaccesseu tenho

ErrorDocument 404 http://foo.com/404.html

Funciona, no sentido de que eu me recupero de qualquer erro de arquivo não encontrado e mostro a página 404, mas a maneira como funciona é redirecionar o URI errado usando um 301 para minha 404.htmlpágina.

Isso é ruim porque os mecanismos de pesquisa e rastreadores não acabarão vendo um código 404, e sim um código 301, e não eliminarão as páginas excluídas de seus índices.

Posso fazer com que o Apache forneça o conteúdo desta página 404 após erros de arquivo não encontrado, mas ainda assim retorne um código 404 em vez do 301?

Responder1

Você deve tentar usar um caminho absoluto ou relativo e não um URL

Meu apache2.conf:

ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html

Responder2

Não aponte para um URL externo

Os documentos do Apache dizem:

A sintaxe é,

ErrorDocument <3-digit-code> <action>

onde a ação pode estar,

  • Texto a ser exibido. Coloque o texto entre aspas (").
  • Um URL externo para redirecionar.
  • Um URL local para redirecionar.

Apontar para um URL externo causará um redirecionamento real, enquanto usar um URL local é interno.

Então, para renderizar o conteúdo de um arquivo, basta apontar para ele, por exemplo:

ErrorDocument 404 /404.html

Use o código de status correto para o trabalho

Isso é ruim porque os mecanismos de pesquisa e rastreadores não acabarão vendo um código 404, mas sim um código 301 enão limpará páginas excluídas de seus índices.

Se a páginausadoexistir e agora não existe, o código de resposta correto é410 desapareceu. 410 é o código para dizer "ei, isso não existe", enquanto 404 só será interpretado como significando isso após repetidas tentativas de acessar a página agora inexistente.

Responder3

Comente as respostas de Maxence e AD7six (não tenho reputação suficiente em serverfaul e as reputações de troca de pilha aparentemente não contam):

Acabei de resolver o problema dessa maneira, mas faltaram as imagens e os estilos incluídos, pois o URL ainda é o URL que o usuário estava tentando chamar.

A solução é adicionar uma tag base no cabeçalho do documento 404 como

ErrorDocument 404

ou usar URLs absolutos com ou sem protocolo/nome de domínio.

informação relacionada