diff --git a/server.js b/server.js
index 918ffccfe4f19156e3e7672c67734111e37463f8..2cfcf1908aed19af3afd024411a4ea98c7bf73cd 100644
--- a/server.js
+++ b/server.js
@@ -3297,7 +3297,7 @@ cache(function(data, match, sendBadge, request) {
 }));
 
 // GitHub issues integration.
-camp.route(/^\/github\/issues(-pr)?(-closed)?(-raw)?\/([^/]+)\/([^/]+)\/?([^/]+)?\.(svg|png|gif|jpg|json)$/,
+camp.route(/^\/github\/issues(-pr)?(-closed)?(-raw)?\/(?!detail)([^/]+)\/([^/]+)\/?(.+)?\.(svg|png|gif|jpg|json)$/,
 cache(function(data, match, sendBadge, request) {
   var isPR = !!match[1];
   var isClosed = !!match[2];
diff --git a/services/github/github.tester.js b/services/github/github.tester.js
index c0b47698785d6bd550984a983695d00cc134c9cf..24db265b50292782b070642542b0182985004465 100644
--- a/services/github/github.tester.js
+++ b/services/github/github.tester.js
@@ -211,6 +211,16 @@ t.create('GitHub open issues by label (raw)')
     })
   )
 
+// See #1870
+t.create('GitHub open issues by label including slash charactr (raw)')
+  .get('/issues-raw/IgorNovozhilov/ndk/@ndk/cfg.json')
+  .expectJSONTypes(
+    Joi.object().keys({
+      name: 'open @ndk/cfg issues',
+      value: isMetric,
+    })
+  )
+
 t.create('GitHub open issues (repo not found)')
   .get('/issues-raw/badges/helmets.json')
   .expectJSON({