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!

Foi útil?

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

  1. Determinar o conteúdo é inválido
  2. Romper com execução atual
  3. Limpar qualquer saída, deve haver alguma.
  4. Enviar o cabeçalho de status 404
  5. 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");
?>

http://us.php.net/manual/en/function .header.php

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top