Go:相对于Apache mod_proxy的http.Redirect

时间:2014-01-20 22:41:29

标签: apache go mod-proxy

我有一个简单的服务器监听:8888

package main

import (
  "log"
  "net/http"
)

func main() {

  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    log.Println("redirecting to foo")
    http.Redirect(w, r, "foo", http.StatusFound)
  })

  http.HandleFunc("/foo", func(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("fooooo"))
  })

  if err := http.ListenAndServe(":8888", nil); err != nil {
    log.Fatal(err)
  }
}

我坐在apache后面代理了对/bar/*到go服务器的所有请求。 我正在使用ProxyPassMatch来执行此操作。

 ProxyPassMatch ^/bar/?(:?(.*))?$ http://localhost:8888/$2

问题是当我转到/bar/时,我被重定向到/foo而不是/bar/foo

有没有办法让这个工作或我需要在/bar的所有重定向前加上?

1 个答案:

答案 0 :(得分:1)

如果您希望Apache在重定向响应中重写位置,则还需要在配置中包含ProxyPassReverse指令。这样的事情可以解决问题:

ProxyPassReverse /bar/ http://localhost:8888/