Si, ma solo perché l'array l'hai messo all'interno di una stringa. Altrimenti gli apici all'indice vanno sempre messi a meno che l'indice stesso non è una var.le: in tal caso non vanno messi.

Es.

$prova[$mio_indice]

qui gli apici non vanno messi.

E, comunque quando usi una var.le in una stringa se usi la dicitura che ti ho suggerito, non avrai problemi:

header("location:" . $_SERVER['PHP_SELF'] . "?id=$id&msg=" . $messaggio);