Alguém no meu estúdio projetou uma página alguns anos atrás, e agora o cliente decidiu mudar o servidor (ele se mudou para um servidor Linux Apache rodando o Gen2 SMP, 64 bits, PHP versão 5.3.8, Standard MYSQL versão 5). De repente, começou a fazer coisas estranhas.
Ao clicar em um link que requer login, a página redireciona você para a página de login usando a função header()
no PHP. Curiosamente, a página mostra isso:
OK
The server encountered an internal error or misconfiguration and
was unable to complete your request. Please contact the server
administrator, [no address given] and inform them of the time the
error occurred, and anything you might have done that may have caused
the error. More information about this error may be available in the
server error log. HTTP/1.1 200 OK Date: Mon, 15 Oct 2012 17:27:32 GMT
Server: Apache/2.2.22 (Unix) FrontPage/5.0.2.2635 X-Powered-By:
PHP/5.3.8 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control:
no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma:
no-cache Keep-Alive: timeout=5, max=399 Connection: Keep-Alive
Transfer-Encoding: chunked Content-Type: text/html 232c
Em seguida, a própria página e, em seguida, outro cabeçalho:
0 1f4
OK
The server encountered an internal error or misconfiguration
and was unable to complete your request. Please contact the server
administrator, [no address given] and inform them of the time the
error occurred, and anything you might have done that may have caused
the error. More information about this error may be available in the
server error log. 0
O mais intrigante é que, se você atualizar a página ou pressionar Enter na URL, ela será carregada corretamente. Eu tenho verificado os logs, e isso só culpa um favicon inexistente. Eu também verifiquei o .htaccess, tudo estava correto (RewriteBase era / como pretendido, e a única coisa que existe é outra regra que move ^ en / pedidos para solicitar? Lang = en. Alguém já enfrentou algo assim?
Editar : o IE não aciona esses dois cabeçalhos. Isso está ficando mais estranho.
A solução! : Como o @adaptr apontou, era uma questão de PHP e não de qualquer coisa relacionada ao servidor. O último codificador (eu sei que não é educado culpar o antecessor, mas esta situação me levou muito tempo) fez isso:
/* config.php -> included everywhere as a bootstrap*/
// ... constant/mysql setup
if($notLogged)
{
$forward = ...;//previous url
header("Location: ".WWW.LANG."/customer-area/login/index.php?forward=".$forward);
exit;
}
Depois de olhar mais fundo, algo me torceu: exit;
enviaria corretamente os cabeçalhos, ou não? Claro, remover esse exit;
continuaria a executar a página (eu sei que não está correto, é por isso que eu não tentei antes). No entanto, se os cabeçalhos não estivessem sendo enviados completamente, isso poderia causar qualquer tipo de problema (eu não sou um cara servidor, não tenho certeza sobre isso, desculpe mates). Depois de remover essa chamada exit;
, a página estava sendo formada corretamente, os cabeçalhos foram "fechados" (por causa do início da saída) e todas as engrenagens começaram a se mover novamente. Obrigado a todos, rapazes, melhores 100 pontos =)