Ciao,
stai facendo confusione fra elaborazione lato server e lato client.
L'alert viene eseguito sul client ed è bloccante per quella finestra del browser ma non può bloccare l'elaborazione dello script php perché quello è già terminato infatti una volta generato il codice html+javascript il php ha terminato il suo lavoro.
Il tuo codice presenta inoltre un errore concettuale, legato però sempre a questo discorso, e cioè che quando invii il codice al client (anche se invii un semplice alert) invii automaticamente anche gli header della pagina quindi non puoi poi rifare la Header altrimenti ottieni il calssico "Headers already sent".
Entra nell'ottica client-server: il client fa una richiesta e il server risponde e fra i due mondi non è possibile alcuna interazione.
Ciao
EDIT: il consiglio di m4rko80 infatti è di fare la redirect con un'istruzione js, cioè di fare una nuova richiesta al server