diff --git a/app/controllers/refs_controller.rb b/app/controllers/refs_controller.rb
index e4eb2d33ea65754a14341d4e6c14ef68141bc1ff..09d9eb51b8241ac01623643069a410396c0873a6 100644
--- a/app/controllers/refs_controller.rb
+++ b/app/controllers/refs_controller.rb
@@ -12,7 +12,7 @@ class RefsController < ProjectResourceController
     respond_to do |format|
       format.html do
         new_path = if params[:destination] == "tree"
-                     project_tree_path(@project, @ref)
+                     project_tree_path(@project, (@ref + "/" + params[:path]))
                    else
                      project_commits_path(@project, @ref)
                    end
diff --git a/config/routes.rb b/config/routes.rb
index 5e556dccc2741e573fbf25d6c282bea55b9fc2e5..27188b3b89fc890471cd00c876c16d248ced3b1e 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -158,7 +158,7 @@ Gitlab::Application.routes.draw do
     resources :deploy_keys
     resources :protected_branches, only: [:index, :create, :destroy]
 
-    resources :refs, only: [], path: "/" do
+    resources :refs, only: [] do
       collection do
         get "switch"
       end
diff --git a/lib/extracts_path.rb b/lib/extracts_path.rb
index 5c96eac02e7de0d3bec774b5fec337464a03e24a..14201ae63ce80ca26c3c46d2ba343006e9b43588 100644
--- a/lib/extracts_path.rb
+++ b/lib/extracts_path.rb
@@ -52,7 +52,7 @@ module ExtractsPath
 
     # Remove project, actions and all other staff from path
     input.gsub!(/^\/#{Regexp.escape(@project.path_with_namespace)}/, "")
-    input.gsub!(/^\/(tree|commits|blame|blob)\//, "") # remove actions
+    input.gsub!(/^\/(tree|commits|blame|blob|refs)\//, "") # remove actions
     input.gsub!(/\?.*$/, "") # remove stamps suffix
     input.gsub!(/.atom$/, "") # remove rss feed
     input.gsub!(/\/edit$/, "") # remove edit route part