diff --git a/reviewboard/static/rb/js/reviewRequestPage/views/issueSummaryTableView.es6.js b/reviewboard/static/rb/js/reviewRequestPage/views/issueSummaryTableView.es6.js
index 37bac4ceed054732a193b241d2db7712a74c642a..c8bf5afbac78d3cd389943815eda95600d60ad0d 100644
--- a/reviewboard/static/rb/js/reviewRequestPage/views/issueSummaryTableView.es6.js
+++ b/reviewboard/static/rb/js/reviewRequestPage/views/issueSummaryTableView.es6.js
@@ -75,7 +75,6 @@ RB.ReviewRequestPage.IssueSummaryTableView = Backbone.View.extend({
 
         this._buildReviewerFilterMap();
         this._checkIssues();
-        this._uncollapseTarget();
 
         this.listenTo(this.model, 'issueStatusUpdated',
                       this._onIssueStatusChanged);
@@ -235,27 +234,6 @@ RB.ReviewRequestPage.IssueSummaryTableView = Backbone.View.extend({
     },
 
     /**
-     * Uncollapse the review with the comment specified in the URL.
-     *
-     * This will locate the review entry that has the comment that's
-     * referenced in the hash for the URL and expand its box.
-     */
-    _uncollapseTarget() {
-        const hash = RB.getLocationHash();
-
-        if (hash.indexOf('comment') !== -1) {
-            const $targetBox = $(`a[name=${hash}]`).closest('.box');
-
-            if ($targetBox.hasClass('collapsed')) {
-                $targetBox.removeClass('collapsed');
-
-                // Scroll down to the targeted comment box
-                window.location.hash = hash;
-            }
-        }
-    },
-
-    /**
      * Handler for when the issue status of a comment changes.
      *
      * Updates the display of the table to reflect the state of that issue.
diff --git a/reviewboard/static/rb/js/reviewRequestPage/views/reviewRequestPageView.es6.js b/reviewboard/static/rb/js/reviewRequestPage/views/reviewRequestPageView.es6.js
index 1b811e876584ece1125cc293ae0fd77061abb69f..3e73c26cbc0dd217419814d28a5a4a3df070118c 100644
--- a/reviewboard/static/rb/js/reviewRequestPage/views/reviewRequestPageView.es6.js
+++ b/reviewboard/static/rb/js/reviewRequestPage/views/reviewRequestPageView.es6.js
@@ -54,21 +54,34 @@ RB.ReviewRequestPage.ReviewRequestPageView = RB.ReviewablePageView.extend({
          * If trying to link to some anchor in some entry, we'll expand the
          * first entry containing that anchor.
          */
-        const selector = window.location.hash.match(/^#[A-Za-z0-9_\.-]+$/);
+        const hash = RB.getLocationHash();
         let anchorFound = false;
+        let selector = null;
+
+        if (hash !== '') {
+            if (hash.indexOf('comment') !== -1) {
+                selector = `a[name=${hash}]`;
+            } else {
+                selector = `#${hash}`;
+            }
+        }
 
         this._entryViews.forEach(entryView => {
             entryView.render();
 
-            if (!anchorFound &&
-                selector &&
-                entryView.$(selector[0]).length > 0) {
+            if (!anchorFound && selector && entryView.$(selector).length > 0) {
                 /*
                  * We found the entry containing the specified anchor. Expand
                  * it and stop searching the rest of the entries.
                  */
                 entryView.expand();
                 anchorFound = true;
+
+                /*
+                 * Scroll down to the particular anchor, now that the entry
+                 * is expanded.
+                 */
+                window.location.hash = hash;
             }
         });
 
diff --git a/reviewboard/static/rb/js/utils/urlUtils.js b/reviewboard/static/rb/js/utils/urlUtils.js
index a6c2a8ab1aa4051d5290f9f442ee56e9adda2e3f..3a6ed4a6bf510f6d5eb48fe2058a9f99abb935fc 100644
--- a/reviewboard/static/rb/js/utils/urlUtils.js
+++ b/reviewboard/static/rb/js/utils/urlUtils.js
@@ -24,7 +24,7 @@ RB.getLocationHash = function(url) {
     rawHash = url.split('#')[1] || '';
     decodedHash = decodeURIComponent(rawHash);
 
-    if (!decodedHash.match(/^[A-Za-z0-9,_-]*$/)) {
+    if (!decodedHash.match(/^[A-Za-z0-9,_\.-]*$/)) {
         /*
          * This hash contains characters we cannot necessarily trust.
          * Instead of hoping we can trust it or attempting to sanitize it,
@@ -35,4 +35,4 @@ RB.getLocationHash = function(url) {
     }
 
     return decodedHash;
-};
\ No newline at end of file
+};
