
No meu .htaccess
eu 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.html
pá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.