2009-08-06 16 views
8

So che questo è stato trattato prima, ma non riesco a trovare una risposta a questo,PHP reindirizzamento intestazione non funziona

Ho sempre usato questo;

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

Questo ha sempre lavorato nel mio progetto attuale e tutto ad un tratto non funziona in nessuna delle mie browser

vorrei capire il problema e risolverlo, invece di utilizzare

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

ho anche la segnalazione degli errori abilitato e si vede nessun errore

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

Qualche idea sul perché non funzionerà?

+4

^è XOR così: E_ALL^​​^ E_WARNING E_NOTICE = 111111111^000001000^000000010 = 111110101 significato tutti gli errori eccetto gli avvisi e le comunicazioni. – danamlund

+0

grazie Vorrei averlo trovato da molto tempo, ci devono essere migliaia di avvisi ora sul mio sito = ( – JasonDavis

risposta

18

Prova:

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'); 

Vedere quello che si ottiene. Non dovresti usare^(xor) nella tua chiamata error_reporting() perché stai involontariamente chiedendo tutti gli errori TRANNE le comunicazioni e gli avvertimenti .. che è quello che è un errore di 'header già inviati'.

Edit:

Prova anche a mettere a filo() proprio sopra l'intestazione) chiamata (.

+3

Il mio denaro è su "intestazioni già inviate". – karim79

+0

Sì, questo sembra essere il problema, intestazioni già inviato, dice la riga 45 che è questa; Non vedo come risolvere il problema ancora – JasonDavis

+0

Weird thing is I lo sto facendo da molto tempo su questo server e ora smetto di funzionare, cosa che includo un file di intestazione e il reindirizzamento viene chiamato nel file incluso quindi non sono sicuro di come farlo funzionare dall'intestazione file i è già stampato nel momento in cui raggiunge il mio reindirizzamento – JasonDavis

13

Provare a rimuovere lo spazio tra la posizione e la prima h in http.

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

si trasforma in

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

Ho avuto questo problema sul mio WAMP Server.

Anche se non dovrebbe essere il problema, considerando che è come è documentato nella documentazione di PHP. Ma dovresti probabilmente provarlo lo stesso. So che ha funzionato per me in un certo numero di casi.

+1

"rimuovere lo spazio tra la posizione e la prima h in http". Funziona come un incantesimo, molte grazie. –

+0

Ho avuto anche questo problema: Safari, Explorer e Firefox sembravano funzionare bene, Chrome era intermittente e Safari mobile appena rifiutato Gr. –

1

Anche quando si utilizza la funzione di intestazione deve essere la prima cosa chiamata prima che qualsiasi testo (anche uno spazio) sia scritto sul client, quindi controllare di nuovo che non ci siano spazi in uscita prima della chiamata, anche prima th

<?php 
+0

Non riceve alcun errore. In caso affermativo, genererebbe un errore. –

0

Cosa succede esattamente quando si visita la pagina? Puoi provare Firebug o qualsiasi altro strumento che ti permetta di analizzare le intestazioni HTTP e controllare se il reindirizzamento avviene realmente e se l'intestazione Location è realmente presente.

0

È inoltre necessario verificare che si stia effettuando il reindirizzamento a una posizione valida e che la posizione disponga di un'impostazione corretta di messaggi/pagine di errore 404 e 500. Potrebbe essere che stai semplicemente reindirizzando un brutto posto.

2

provare questo. ha funzionato per me

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

1

Può essere strano soluzione, ma provate questo, modificare la codifica utf8 pagina dal ANSI e che funzionerà.

utilizzare qualsiasi editor di testo e salvare la pagina come codifica ANSI e caricarla sul server online.

+0

Se questo aiuta, il problema è probabilmente la codifica UTF-8-with-BOM, come menzionato sopra. – bastelflp

0

strano, ma eliminando le righe vuote in php lavorato per me: - \

codice

prima:

<?php 

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

?> 

codice che ha funzionato:

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

PROBLEMI COMUNI:

1) non dovrebbe esserci alcuna uscita (es. echo.. o codici HTML) prima del comando header(.......);.

2) Non ci dovrebbe essere un spazi bianchi (o nuova riga) prima e dopo <?php?> tag.

3)REGOLA D'ORO! - il file (e anche gli altri file include) hanno UTF8 senza codifica BOM (e non solo UTF-8). Questo è un problema in molti casi (perché il file codificato UTF8 ha qualcosa di speciale all'inizio dell'output del file) !!!!!!!!!!!

4)Attivare segnalazione errori. E dì l'errore.

5) Se reindirizzamento, poi dopo header(...); è necessario utilizzare exit;

6) usare sempre 301 o 302 in riferimento:

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

7) Se nessuna delle sopra aiuta, usa il reindirizzamento JAVSCRIPT (non raccomandato da Google), ma potrebbe essere l'ultima possibilità ...:

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

** Codifica UTF-8 **! Questo l'ha risolto per me. Lavorato con la codifica impostata su 'UTF-8' nel notepad ++ ma non con' UTF-8-BOM', essi [lo hanno modificato] (https://notepad-plus-plus.org/community/topic/7409/utf-8 -without-bom-option) per notepad ++ – bastelflp

+0

Grazie mille, così tanto. Perdere BOM ha fatto il trucco ... mi stava facendo impazzire. – ShadowHunter

1

L'aggiunta di ob_start() ha risolto questo problema.

0

Prova questa (che lavora per me):

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

Invece di

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

0

Se la pagina di indice è un file html, potrebbe non funzionare. Cambialo per indicizzare.php e utilizzare questo codice:

<?php 

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

?>