2012-03-29 17 views
6

¿Cómo puedo redireccionar una solicitud de página en Go running on GAE, para que la dirección del usuario se muestre correctamente sin recurrir a mostrar una página de redirección? Por ejemplo, si el usuario tendría que escribir:Golang, GAE, ¿redirigir al usuario?

www.hello.com/1 

me gustaría que mi solicitud Ir a redirigir al usuario a:

www.hello.com/one 

Sin recurrir a:

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

Respuesta

22

para una única vez:

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

Si esto sucede algunas veces, puede crear un manejador de redirección en su lugar:

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

y utilizar de esta manera:

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

Para aquellos que utilizan Go1, 'SetHeader' está en desuso. Use 'w.Header(). Set (" Estado "," 302 ")' en su lugar. – hyperslug

Cuestiones relacionadas