2012-03-29 121 views
6

如何在GAE上運行Go請求中的頁面請求重定向,以便用戶的地址能夠正確顯示而不訴諸顯示重定向頁面?例如,如果用戶鍵入:Golang,GAE,重定向用戶?

www.hello.com/1 

我想我轉到應用程序將用戶重定向到:

www.hello.com/one 

沒有求助於:

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

回答

22

對於一次性:

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

如果這種情況發生了幾次,你可以創建一個重定向處理來代替:

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

,並使用它像這樣:

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

對於使用GO1那些'SetHeader'已被棄用。使用'w.Header()。設置(「狀態」,「302」)代替。 – hyperslug 2012-03-30 04:22:51