diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java b/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java
index 07e21f9..7013918 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java
@@ -105,6 +105,7 @@
 
       return new MarkdownToHtml(view, cfg)
         .setImageLoader(img)
+        .setReadme(true)
         .toSoyHtml(root);
     } catch (LargeObjectException | IOException e) {
       log.error(String.format("error rendering %s/%s",
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
index 21bf1bf..46ab655 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -142,7 +142,10 @@
       return null;
     }
 
-    ReadmeHelper readme = new ReadmeHelper(walk.getObjectReader(), view, cfg, rootTree);
+    ReadmeHelper readme = new ReadmeHelper(
+        walk.getObjectReader(),
+        GitilesView.path().copyFrom(view).setRevision(Revision.HEAD).setPathPart("/").build(),
+        cfg, rootTree);
     readme.scanTree(rootTree);
     if (readme.isPresent()) {
       return ImmutableMap.<String, Object> of("readmeHtml", readme.render());
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java
index a9d19df..6687720 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java
@@ -75,6 +75,7 @@
   private final GitilesView view;
   private final Config cfg;
   private ImageLoader imageLoader;
+  private boolean readme;
   private TableState table;
 
   public MarkdownToHtml(GitilesView view, Config cfg) {
@@ -87,6 +88,11 @@
     return this;
   }
 
+  public MarkdownToHtml setReadme(boolean readme) {
+    this.readme = readme;
+    return this;
+  }
+
   /** Render the document AST to sanitized HTML. */
   public SanitizedContent toSoyHtml(RootNode node) {
     if (node == null) {
@@ -298,8 +304,22 @@
   }
 
   private String href(String url) {
+    if (HtmlBuilder.isValidHttpUri(url)) {
+      return url;
+    }
     if (MarkdownUtil.isAbsolutePathToMarkdown(url)) {
-      return GitilesView.doc().copyFrom(view).setPathPart(url).build().toUrl();
+      return GitilesView.path().copyFrom(view).setPathPart(url).build().toUrl();
+    }
+    if (readme && !url.startsWith("../") && !url.startsWith("./")) {
+      String dir = "";
+      if (view.getPathPart() != null && view.getPathPart().endsWith("/")) {
+        dir = view.getPathPart();
+      } else if (view.getPathPart() != null) {
+        dir = view.getPathPart() + '/';
+      }
+      return GitilesView.path().copyFrom(view)
+          .setPathPart(dir + url)
+          .build().toUrl();
     }
     return url;
   }
