Ao enviar o código de status HTTP?
-
03-07-2019 - |
Pergunta
Actualmente os meus scripts PHP, eu redirecionar o usuário para um costume 404 não encontrado página de erro quando ele / ela tenta acessar o conteúdo que não existe ou não pertence a esse usuário. Como assim:
header('Location: http://www.mydomain.com/error/notfound/');
exit;
Eu percebo o cabeçalho acima () chamada envia um código de status 302 redirecionamento por padrão.
O que eu não entendo, no entanto, é quando devo enviar o código de status 404 Not Found. Antes que eu redirecionar o usuário? Ou quando eu exibir o / error / notfound / página?
Obrigado por sua ajuda!
Solução
Você deve fazer algo como isto:
header("HTTP/1.0 404 Not Found");
include 'error.php';
die();
Outras dicas
Você não executar 404 erros como um redirecionamento em tudo.
O que você realmente quer fazer é enviar o cabeçalho de status 404, e em seguida, substituir a saída de corrente com o corpo de uma página 404.
Existem várias maneiras de fazer isso e isso depende um pouco sobre como seu site está estruturado. aplicações MVC normalmente entregar este com uma frente. Eu vi outros sistemas que lançar uma exceção e, em seguida, o manipulador de exceção registrada cuida de exibir a página 404.
De qualquer forma, os passos ásperas são
- Determinar o conteúdo é inválido
- Romper com execução atual
- Limpar qualquer saída, deve haver alguma.
- Enviar o cabeçalho de status 404
- Enviar o conteúdo da página 404
Você não pode usar 404 e Localização: junto. Localização é válida apenas para algumas respostas (201 e 3xx)
No entanto, pode enviar a página HTML personalizado como corpo de sua resposta 404.
De php.net:
Existem duas chamadas cabeçalho caso especial. O primeiro é um cabeçalho que começa com a seqüência "HTTP /" (caso não é significativa), que será usado para descobrir o código de status HTTP para enviar. Por exemplo, se você configurou o Apache para usar um script PHP para pedidos alça para ficheiros em falta (usando a diretiva ErrorDocument), você pode querer ter certeza de que seu script gera o código de status adequado.
<?php
header("HTTP/1.0 404 Not Found");
?>
Você deve enviar um código de status 404 HTTP. Browsers e crawlers entender isso. Você também pode querer incluir uma página de erro mais amigável explicar o que aconteceu, incluindo um formulário para procurar o seu site, links Soundex, etc.
A "redirecionamento" e um "não encontrado" são conceitos diferentes.
Que arquivo poderia ser encontrado?
http://www.mydomain.com/error/notfound/
ou
http://www.mydomain.com/not_exist.html
A página " http://www.mydomain.com/not_exist.html " deve ter um cabeçalho 404 E a "página não encontrada" conteúdo.
A quickfix poderia ser:
header("HTTP/1.0 404 Not Found");
readfile('http://www.mydomain.com/error/notfound/');
exit;
Mas isso requer 2 pedidos apache e é tipo de desagradável.