func FullURL(r *http.Request) (*url.URL, error) {
	u, err := url.ParseRequestURI(r.RequestURI)
	if err != nil {
		return nil, err
	}
	u.Scheme = r.URL.Scheme
	u.Host = r.URL.Host
	u.User = r.URL.User
	return u, nil
}
FullURL returns the full url from the incoming request, regardless of
what current whmux.Dir is involved or how req.URL.Path has been edited.
package whredir  
import (
	"net/http"
	"net/url"
	"strings"
	"gopkg.in/webhelp.v1/wherr"
	"gopkg.in/webhelp.v1/whmux"
	"gopkg.in/webhelp.v1/whroute"
)
func Redirect(w http.ResponseWriter, r *http.Request, redirectTo string) {
	http.Redirect(w, r, redirectTo, http.StatusSeeOther)
}
type redirectHandler string
func RedirectHandler(url string) http.Handler {
	return redirectHandler(url)
}
func (t redirectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	Redirect(w, r, string(t))
}
func (t redirectHandler) Routes(
	cb func(method, path string, annotations map[string]string)) {
	cb(whroute.AllMethods, whroute.AllPaths,
		map[string]string{"Redirect": string(t)})
}
var _ http.Handler = redirectHandler("")
var _ whroute.Lister = redirectHandler("")
type RedirectHandlerFunc func(r *http.Request) string
func (f RedirectHandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	Redirect(w, r, f(r))
}
func (f RedirectHandlerFunc) Routes(
	cb func(method, path string, annotations map[string]string)) {
	cb(whroute.AllMethods, whroute.AllPaths,
		map[string]string{"Redirect": "f(req)"})
}
var _ http.Handler = RedirectHandlerFunc(nil)
var _ whroute.Lister = RedirectHandlerFunc(nil)