   "Evaluates to a match form, used by the make-app function."
   [{:keys [host-regex context-path]} uri-sym server-name-sym]
   (let [host-test `(re-matches ~host-regex ~server-name-sym)
-        context-test `(.startsWith ~uri-sym ~context-path)]
+        context-test `(and (.startsWith ~uri-sym ~context-path)
+                           (= (get ~uri-sym ~(count context-path)) \/))]
     `(and ~@(remove nil? (list (when host-regex host-test)
                                (when context-path context-test))))))
 

                                         ~'server-name (:server-name ~'request)]
                                     (or ~@(for [app sorted]
                                             `(when (matcher ~(:ring-conf app) ~'uri ~'server-name)
                                                (boxure/call-in-box ~(:box app)
                                                                    ~(:handler-fn app)
                                                                    ~'request))))))]
                    (eval fn-form))
                  (constantly {:status 503 :body "no apps loaded"}))]
    (alter-var-root #'app (constantly handler))))

  configuration. A required key is :handler-sym, which, when evaluated
  inside the box, should be the ring handler function. Optional keys
  are :context-path and :host-regex. The first acts as a filter for
  the first element(s) in the request URI, for example \"/api/v1\".
  The second is a regular expression, which is matched against the
  server name of the request, for example \".*containium.com\"."
  [{:keys [name project] :as box}]
