2012-03-29 25 views
6

Come posso reindirizzare una richiesta di pagina in Go in esecuzione su GAE, in modo che l'indirizzo dell'utente venga visualizzato correttamente senza ricorrere alla visualizzazione di una pagina di reindirizzamento? Ad esempio, se l'utente digiterà:Golang, GAE, reindirizza utente?

www.hello.com/1 

vorrei la mia domanda Vai a reindirizzare l'utente a:

www.hello.com/one 

Senza ricorrere a:

fmt.Fprintf(w, "<HEAD><meta HTTP-EQUIV=\"REFRESH\" content=\"0; url=/one\"></HEAD>") 

risposta

22

Per una tantum:

func oneHandler(w http.ResponseWriter, r *http.Request) { 
    http.Redirect(w, r, "/one", http.StatusMovedPermanently) 
} 

Se questo accade un paio di volte, è possibile creare un gestore di reindirizzamento invece:

func redirectHandler(path string) func(http.ResponseWriter, *http.Request) { 
    return func (w http.ResponseWriter, r *http.Request) { 
    http.Redirect(w, r, path, http.StatusMovedPermanently) 
    } 
} 

e usarlo in questo modo:

func init() { 
    http.HandleFunc("/one", oneHandler) 
    http.HandleFunc("/1", redirectHandler("/one")) 
    http.HandleFunc("/two", twoHandler) 
    http.HandleFunc("/2", redirectHandler("/two")) 
    //etc. 
} 
5
func handler(rw http.ResponseWriter, ...) { 
    rw.SetHeader("Status", "302") 
    rw.SetHeader("Location", "/one") 
} 
+5

Per coloro che utilizzano Go1, 'SetHeader' è deprecato. Usa 'w.Header(). Set (" Status "," 302 ")' invece. – hyperslug