diff --git a/django/test/client.py b/django/test/client.py
index 166e6ef..843c01c 100644
--- a/django/test/client.py
+++ b/django/test/client.py
@@ -26,7 +26,7 @@ from django.utils.encoding import force_bytes, force_str, uri_to_iri
 from django.utils.functional import SimpleLazyObject, curry
 from django.utils.http import urlencode
 from django.utils.itercompat import is_iterable
-from django.utils.six.moves.urllib.parse import urlparse, urlsplit
+from django.utils.six.moves.urllib.parse import urlparse, urlsplit, urljoin
 
 __all__ = ('Client', 'RedirectCycleError', 'RequestFactory', 'encode_file', 'encode_multipart')
 
@@ -699,7 +699,12 @@ class Client(RequestFactory):
             if url.port:
                 extra['SERVER_PORT'] = str(url.port)
 
-            response = self.get(url.path, QueryDict(url.query), follow=False, **extra)
+            # Prepend the request path to handle relative path redirects
+            path = url.path
+            if not path.startswith('/'):
+                path = urljoin(response.request['PATH_INFO'], path)
+
+            response = self.get(path, QueryDict(url.query), follow=False, **extra)
             response.redirect_chain = redirect_chain
 
             if redirect_chain[-1] in redirect_chain[:-1]:
diff --git a/tests/test_client/tests.py b/tests/test_client/tests.py
index 5c37356..dff7e39 100644
--- a/tests/test_client/tests.py
+++ b/tests/test_client/tests.py
@@ -198,6 +198,18 @@ class ClientTest(TestCase):
         self.assertRedirects(response, '/get_view/', status_code=302, target_status_code=200)
         self.assertEqual(len(response.redirect_chain), 2)
 
+    def test_follow_relative_redirect(self):
+        "A URL with a relative redirect can be followed."
+        response = self.client.get('/accounts/', follow=True)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.request['PATH_INFO'], '/accounts/login/')
+
+    def test_follow_relative_redirect_no_trailing_slash(self):
+        "A URL with a relative redirect with no trailing slash can be followed."
+        response = self.client.get('/accounts/no_trailing_slash', follow=True)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.request['PATH_INFO'], '/accounts/login/')
+
     def test_redirect_http(self):
         "GET a URL that redirects to an http URI"
         response = self.client.get('/http_redirect_view/', follow=True)
