if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Por que isso não funciona? Eu recebo uma página em branco.
php
header
http-status-code-404
danorton
fonte
fonte
Respostas:
Seu código está tecnicamente correto. Se você observasse os cabeçalhos dessa página em branco, veria um cabeçalho 404, e outros computadores / programas conseguiriam identificar corretamente a resposta como arquivo não encontrado.
Obviamente, seus usuários ainda são SOL. Normalmente, 404s são tratados pelo servidor web.
O problema é que, assim que o servidor da Web começa a processar a página PHP, já passou do ponto em que ele manipularia um 404
Além de fornecer um cabeçalho 404, o PHP agora é responsável pela saída da página 404 real.
fonte
Se você olhar as duas últimas linhas de eco, é aí que você verá o conteúdo. Você pode personalizá-lo como quiser.
fonte
Esse é o comportamento correto , você deve criar o conteúdo da página 404.
O cabeçalho 404 é usado por spiders e gerenciadores de download para determinar se o arquivo existe.
(Uma página com um cabeçalho 404 não será indexada pelo Google ou por outros mecanismos de pesquisa)
Usuários normais, no entanto, não olham para os cabeçalhos http e usam a página como uma página normal.
fonte
Para o registro, este é o manipulador de todos os casos:
fonte
die()
necessário?Carregue a página 404 do servidor padrão, se você tiver uma, por exemplo, definida para o apache:
fonte
Desde o php 5.4 agora você pode fazer
http_response_code(404);
fonte
Outra solução, baseada no @ Kitet's.
Se você estiver programando um site hospedado em um servidor, você não tem controle, não saberá qual arquivo é o "404missing.html". No entanto, você ainda pode fazer isso.
Dessa maneira, você forneceu exatamente o mesmo resultado de uma página 404 normal no mesmo servidor. Um observador não poderá distinguir entre uma página PHP existente retorna 404 e uma página inexistente.
fonte
tente com:
Tchau!
fonte
Uma versão um pouco mais curta. Suprimir eco estranho.
fonte
nunca simplifique as instruções de eco e nunca esqueça o ponto-e-vírgula como acima, também porque executar um substr na página, podemos facilmente executar php_self
fonte
Se você deseja que a página de erro padrão do servidor seja exibida, você deve lidar com isso no servidor.
fonte
Você está fazendo certo, embora possa usar algum refino. Parece que isso foi resolvido, então vamos falar dos benefícios práticos do aplicativo:
Um site antigo nosso, que possui uma grande coleção de documentos técnicos multilíngües, estava executando isso dentro de uma condição condicional:
O problema (além da mensagem inútil e da má experiência do usuário) é que geralmente usamos um rastreador de links (na nossa integridade) para verificar links ruins e documentos ausentes. Isso significa que estávamos recebendo uma resposta 200 sem erros perfeitamente correta nos dizendo que havia um arquivo lá. A integridade não sabia que estávamos esperando um PDF, então tivemos que adicionar manualmente um cabeçalho 404 com php. Ao adicionar seu código acima do dado (porque nada depois seria executado e o cabeçalho sempre deveria estar antes de qualquer html renderizado), a integridade (que se comporta mais ou menos como um navegador) retornaria um 404 e saberíamos exatamente onde procurar por falta arquivos. Existem maneiras mais elegantes de informar ao usuário que há um erro,
fonte
Tente o seguinte:
fonte
Você sabe, no meu site eu criei algo como isto:
Espero que ajude você.
fonte
Eu vim para esse problema. Acho que o redirecionamento para um link inexistente no servidor pode ajudar! Como o servidor retornaria seu 404:
header('Redirect abbb.404.nonexist');
<isso não existe com certezafonte
Se você deseja mostrar a página 404 padrão do servidor, pode carregá-la em um quadro como este:
fonte