2012-03-29 23 views
6

Làm cách nào để chuyển hướng yêu cầu trang trong Go đang chạy trên GAE, để địa chỉ của người dùng hiển thị chính xác mà không cần phải hiển thị trang chuyển hướng? Ví dụ, nếu người dùng sẽ gõ:Golang, GAE, chuyển hướng người dùng?

www.hello.com/1 

tôi muốn ứng dụng Go của tôi để chuyển hướng người dùng đến:

www.hello.com/one 

Nếu không phải dùng đến:

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

Trả lời

22

cho một lần một:

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

Nếu điều này xảy ra một vài lần, bạn có thể tạo một handler chuyển hướng thay vì:

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

và sử dụng nó như thế này:

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

Đối với những người sử dụng Go1, 'SetHeader' bị phản đối. Sử dụng 'w.Header(). Đặt (" Trạng thái "," 302 ")' để thay thế. – hyperslug

Các vấn đề liên quan