
Alguien en mi estudio diseñó una página web hace algunos años, y ahora el cliente decidió cambiar el servidor (se mudó a un servidor Linux Apache con Gen2 SMP, 64 bits, PHP versión 5.3.8, MYSQL estándar versión 5). De repente empezó a hacer cosas raras.
Al hacer clic en un enlace que requiere iniciar sesión, la página lo redirige a la página de inicio de sesión usando header()
la función en PHP. Curiosamente la página muestra esto:
DE ACUERDO
El servidor encontró un error interno o una mala configuración y no pudo completar su solicitud. Comuníquese con el administrador del servidor, [no se proporciona dirección] e infórmele de la hora en que ocurrió el error y de cualquier cosa que haya hecho que pueda haber causado el error. Es posible que haya más información disponible sobre este error en el registro de errores del servidor. HTTP/1.1 200 OK Fecha: lunes 15 de octubre de 2012 17:27:32 GMT Servidor: Apache/2.2.22 (Unix) FrontPage/5.0.2.2635 X-Powered-By: PHP/5.3.8 Vence: jueves 19 de noviembre 1981 08:52:00 GMT Control de caché: sin almacenamiento, sin caché, debe revalidar, verificación posterior = 0, verificación previa = 0 Pragma: sin caché Mantener vivo: tiempo de espera = 5, máximo = 399 Conexión: Keep-Alive Transfer-Codificación: fragmentado Tipo de contenido: texto/html 232c
Luego la página misma y luego otro encabezado:
0 1f4
DE ACUERDO
El servidor encontró un error interno o una mala configuración y no pudo completar su solicitud. Comuníquese con el administrador del servidor, [no se proporciona dirección] e infórmele de la hora en que ocurrió el error y de cualquier cosa que haya hecho que pueda haber causado el error. Es posible que haya más información disponible sobre este error en el registro de errores del servidor. 0
Lo más intrigante es que si actualiza la página o presiona Intro en la URL, se carga correctamente. He estado revisando los registros y solo culpa a un favicon inexistente. También verifiqué el .htaccess, todo estaba correcto (RewriteBase fue / según lo previsto, y lo único que hay es otra regla que mueve ^en/ request a request?lang=en. ¿Alguien se ha enfrentado a algo como esto?
Editar: IE no activa estos dos encabezados. Esto se está volviendo más extraño.
¡La solución!: Como señaló @adaptr, era una cuestión de PHP y no de nada relacionado con el servidor. El último codificador (sé que no es de buena educación culpar al predecesor, pero esta situación me ha llevado demasiado tiempo) hizo esto:
/* 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;
}
Después de mirar más profundamente, algo me retorció: exit;
¿enviaría correctamente los encabezados o no? Por supuesto, eliminar eso exit;
seguiría ejecutando la página (sé que no es del todo correcto, por eso no lo intenté antes). Sin embargo, si los encabezados no se envían por completo, podría causar cualquier tipo de problema (no soy un servidor, no estoy seguro de eso, lo siento amigos). Después de eliminar esa exit;
llamada, la página se estaba formando correctamente, los encabezados se "cerraron" (debido al inicio de la salida) y todos los engranajes comenzaron a moverse nuevamente. Gracias a todos chicos, la mejor recompensa son 100 puntos =)
Respuesta1
Si los registros de Apache no muestran ningún error, eso significa que PHP manejó todo esto y también devolvió las respuestas extrañas al cliente.
Habilite el registro PHP adecuado e investigue qué está haciendo.
Este bit en la respuesta es indicativo:
Codificación de transferencia: fragmentada
Eso significa que PHP está enviando la respuesta en una secuencia (texto/html) queno tiene tamaño de contenido definidoen los encabezados.
Esto puede provocar que cualquier salida de encabezado (algo que PHP almacena en caché con frecuencia, es decir, se genera fuera de orden) se deslice aunque sea un poco y haga que el cliente piense que se está enviando una nueva página.
Ésa es sólo una posible razón; El registro PHP adecuado le dirá más.
Respuesta2
Debe depurar el código de la página en lugar de buscar el motivo en el servidor. Por lo que publicaste, puedo ver que se creó usando FrontPage (¿realmente lo usó un profesional?), por lo que inevitablemente contiene código que no funcionará correctamente en una plataforma que no sea de Microsoft. Corrija el código eliminando todo el código específico de Microsoft y podrá ejecutarse correctamente.