I can't seem to get my routing right. I'm using Gorilla Mux and I'm trying to serve my angular app, so basically my index.html, from any url except them starting with "/foo".
This one works:
func StaticFileServer(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, config.dir)
}
func main() {
fs := http.Dir(config.dir)
fileHandler := http.FileServer(fs)
router = mux.NewRouter()
router.Handle("/foo/page", PublicHandler(handler(getAll)).Methods("GET")
router.Handle("/foo/page/{id}", PublicHandler(handler(getOne)).Methods("GET")
router.PathPrefix("/{blaah}/{blaah}/").Handler(fileHandler)
router.PathPrefix("/").HandlerFunc(StaticFileServer)
...
}
But there must be an easier way than to explicitly declaring every possible route, like this PathPrefix("/{blaah}/{blaah}/") thingy... With this one, any other url than /{blaah}/{blaah}/ returns a 404 page not found, instead of index.html.
So I'd like to get everything served (static files etc.) as long as they can be found, but everything else should return /public/index.html.
I'm a bit late, but other people may find my answer useful.
Basically Gorilla Mux is doing all of your routings here. I'm assuming you want AngularJS to do the routing for any URL that doesn't start with "/foo".
You can use regex to send any requests that doesn't start with "/foo" to your index.html using:
router.PathPrefix("/{_:.*}").HandlerFunc(StaticFileServer)