2009-08-06 16 views
8

Sé que esto se ha cubierto anteriormente pero no puedo encontrar una respuesta a esto,Redireccionamiento de encabezado PHP no funciona

Siempre he usado esto;

header("Location: http://www.website.com/"); 
exit(); 

Esto siempre ha trabajado en mi proyecto actual y, de repente, que no está funcionando en cualquiera de mis navegadores

me gustaría averiguar el problema y solucionarlo en lugar de utilizar

echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>"; 

también he permitido a los informes de errores y se nota ningún error

// SET ERROR REPORTING 
error_reporting(E_ALL^E_WARNING^E_NOTICE); 
ini_set('display_errors', TRUE); 

¿Alguna idea de por qué no va a funcionar?

+4

^XOR es así:^E_ALL E_WARNING^E_NOTICE = 111111111 000001000^^ = 000000010 111110101 significado todos los errores, excepto las advertencias y avisos. – danamlund

+0

gracias Desearía haber descubierto esto hace mucho tiempo, debe haber miles de avisos ahora en mi sitio = ( – JasonDavis

Respuesta

18

Probar:

error_reporting(E_ALL | E_WARNING | E_NOTICE); 
ini_set('display_errors', TRUE); 


flush(); 
header("Location: http://www.website.com/"); 
die('should have redirected by now'); 

ver lo que hay. No debe usar^(xor) en su llamada error_reporting() porque involuntariamente está pidiendo todos los errores EXCEPTO avisos y advertencias ... que es lo que es un error de "encabezados ya enviados".

Editar:

Prueba también poner flush() justo encima de la cabecera() llamada.

+3

Mi dinero está en 'encabezados ya enviados'. – karim79

+0

Sí, ese parece ser el problema, encabezados ya enviado, dice la línea 45 que es esto; No veo cómo arreglar esto todavía – JasonDavis

+0

Lo raro es que lo he estado haciendo de esta manera durante mucho tiempo en este servidor y ahora simplemente dejó de funcionar, es que incluyo un archivo de cabecera y se llama al redireccionamiento en el archivo incluido, así que no estoy seguro de cómo hacerlo funcionar desde el encabezado archivo i s ya está impreso en el momento en que alcanza mi redirección – JasonDavis

13

Intente eliminar el espacio entre la ubicación y la primera h en http.

header("Location: http://www.website.com/"); 
exit(); 

convierte en

header("Location:http://www.website.com/"); 
exit(); 

tuve este problema en mi WAMP Server.

Aunque no debería ser el problema, teniendo en cuenta que así está documentado en la documentación de PHP. Pero probablemente deberías intentarlo de todos modos. Sé que me ha funcionado en varios casos.

+1

"quitando la ubicación del espacio entre y la primera h en http." Funciona como un amuleto, muchas gracias. –

+0

Tuve este problema también. Safari, Explorer y Firefox parecían funcionar bien. Chrome era intermitente y Safari móvil se negó. Grr. –

1

Además, cuando usa la función de encabezado, debe llamarse antes que cualquier texto (incluso un espacio) escrito en el cliente, así que compruebe que no hay espacios antes de la llamada, incluso antes th

<?php 
+0

No recibe ningún error. Lanzaría un error si este es el caso. –

0

¿Qué ocurre exactamente cuando visitas la página? Puedes probar Firebug o cualquier otra herramienta que te permita analizar los encabezados HTTP y verificar si la redirección realmente ocurre y si el encabezado Location está realmente presente.

0

También debe verificar que está redireccionando a una ubicación válida, y que la ubicación tiene la configuración adecuada de mensajes de error 404 y 500. Podría ser que simplemente está redirigiendo un lugar malo.

2

prueba esto. trabajó para mi.

echo "<meta http-equiv='refresh' content='0;url=http://www.yoursite.com'>";

1

Puede ser una solución extraña pero probar esto, cambiar la página de codificación UTF-8 de la norma ANSI y funcionará.

utilice cualquier editor de texto y guarde la página como codificación ANSI y cárguela en su servidor en línea.

+0

Si esto ayuda, probablemente el problema sea la codificación UTF-8-con-BOM, como se mencionó anteriormente. – bastelflp

0

líneas en blanco raro, pero la eliminación en php trabajaron para mí: - \

código antes:

<?php 

header("Location: http://www.website.com/"); 

?> 

código que funcionó:

<?php header("Location: http://www.website.com/"); ?> 
10

problemas comunes:

1) no debería haber ninguna salida (es decir echo.. o códigos HTML) antes del header(.......); comando.

2) no debería ser un espacio en blanco (o nueva línea) antes y después de <?php?> etiquetas.

3)GOLDER RULE! - el archivo (y también, si tiene include otros archivos) tiene UTF8 sin codificación BOM (y no solo UTF-8). Eso es un problema en muchos casos (porque el archivo codificado UTF8 tiene un carácter especial en el inicio de la salida del archivo) !!!!!!!!!!!

4)Activar los informes de errores. Y di el error.

5) Si la reorientación, a continuación, después header(...); debe utilizar exit;

6) utilice siempre 301 o 302 en la referencia:

header("location: http://example.com", true, 301); exit; 

7) Si ninguno de los anteriormente ayuda, usa el redireccionamiento JAVSCRIPT (no recomendado por Google), pero puede ser la última oportunidad ...:

echo "<script type='text/javascript'>window.top.location='http://example.com/';</script>"; exit; 
+0

** ¡codificación UTF-8 **! Esto lo resolvió para mí. Trabajé con la codificación establecida en 'UTF-8' en el bloc de notas ++ pero no con' UTF-8-BOM', ellos [lo cambiaron] (https://notepad-plus-plus.org/community/topic/7409/utf-8 -sin-bom-opción) para bloc de notas ++ – bastelflp

+0

Muchas gracias, mucho. Perder el BOM hizo el truco ... me estaba volviendo loco. – ShadowHunter

1

Añadiendo ob_start() ha resuelto este problema.

0

probar este (que trabaja para mí):

echo '<script>window.location.replace("http://www.example.com")</script>';

En lugar de

header("Location: http://www.example.com");

0

Si su página de índice es un archivo HTML, puede que no funcione. Cambiarlo a indexarphp y utilizar este código:

<?php 

header("Location: http://ea.tc"); 

?>