Você deve tentar usar um caminho absoluto ou relativo e não uma URL
Meu apache2.conf:
ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html
No meu .htaccess
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 ela funciona é redirecionar o URI errado usando uma página 301 para minha 404.html
.
Isso é ruim porque os mecanismos de pesquisa e os rastreadores não acabam vendo um código 404, e sim um código 301, e não limparão páginas excluídas de seus índices.
Posso fazer com que o Apache publique o conteúdo desta página 404 no arquivo que não encontrou erros, e ainda assim retornar um código 404 em vez do 301?
Os documentos do Apache dizem :
The syntax is,
ErrorDocument <3-digit-code> <action>
where the action can be,
- Text to be displayed. Wrap the text with quotes (").
- An external URL to redirect to.
- A local URL to redirect to.
Apontar para um URL externo causará um redirecionamento real, enquanto o uso de um URL local é interno.
Portanto, para processar o conteúdo de um arquivo, basta apontá-lo, por exemplo:
ErrorDocument 404 /404.html
This is bad because search engines and crawlers will not end up seeing a 404 code, rather a 301 code and will not purge deleted pages from their indices.
Se a página usada existir e agora não existir, o código de resposta correto é 410 foi . 410 é o código para dizer "ei, isso não existe" considerando que um 404 só será usado para significar que após repetidas tentativas de acessar a página agora inexistente.
Comente as respostas do Maxence e do AD7six (não tenho mais reputação no serverfaul e as reputações de troca de pilha não contam aparentemente):
Acabei de resolver o problema desta forma, mas as imagens e estilos incluídos estavam em falta, pois o URL ainda é o URL que o usuário estava tentando chamar.
A solução é adicionar uma tag base na cabeça do documento 404, como
ErrorDocument 404
ou para usar URLs absolutos com ou sem protocolo / nome de domínio.