diff --git a/javatests/com/google/gitiles/BranchRedirectFilterTest.java b/javatests/com/google/gitiles/BranchRedirectFilterTest.java
index fbf0ff4..76c6198 100644
--- a/javatests/com/google/gitiles/BranchRedirectFilterTest.java
+++ b/javatests/com/google/gitiles/BranchRedirectFilterTest.java
@@ -27,6 +27,7 @@
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
 import org.eclipse.jgit.junit.TestRepository;
+import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.junit.Before;
@@ -57,10 +58,10 @@
         new BranchRedirectFilter() {
           @Override
           protected Optional<String> getRedirectBranch(Repository repo, String sourceBranch) {
-            if (MASTER.equals(sourceBranch)) {
+            if (MASTER.equals(toFullBranchName(sourceBranch))) {
               return Optional.of(MAIN);
             }
-            if (FOO.equals(sourceBranch)) {
+            if (FOO.equals(toFullBranchName(sourceBranch))) {
               return Optional.of(BAR);
             }
             return Optional.empty();
@@ -109,6 +110,20 @@
   }
 
   @Test
+  public void show_withRedirect_usingShortRefInUrl() throws Exception {
+    repo.branch(MASTER).commit().add("foo", "contents").create();
+
+    String path = "/repo/+/master/foo";
+    FakeHttpServletRequest req = newHttpRequest(path, ORIGIN, QUERY_STRING_HTML);
+    FakeHttpServletResponse res = new FakeHttpServletResponse();
+
+    servlet.service(req, res);
+    assertThat(res.getStatus()).isEqualTo(SC_MOVED_PERMANENTLY);
+    assertThat(res.getHeader(HttpHeaders.LOCATION))
+        .isEqualTo("/b/repo/+/refs/heads/main/foo?format=html");
+  }
+
+  @Test
   public void show_onAutomationRequest() throws Exception {
     repo.branch(MASTER).commit().add("foo", "contents").create();
 
@@ -249,6 +264,13 @@
         .isEqualTo("/b/repo/+/refs/heads/main%7E2..refs/heads/main/?format=html");
   }
 
+  private static String toFullBranchName(String sourceBranch) {
+    if (sourceBranch.startsWith(Constants.R_REFS)) {
+      return sourceBranch;
+    }
+    return Constants.R_HEADS + sourceBranch;
+  }
+
   private static FakeHttpServletRequest newHttpRequest(
       String path, String origin, @Nullable String queryString) {
     FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
