diff --git a/app/assets/javascripts/discourse/controllers/login.js.es6 b/app/assets/javascripts/discourse/controllers/login.js.es6
index ccb68864ec2..6ede862f1d2 100644
--- a/app/assets/javascripts/discourse/controllers/login.js.es6
+++ b/app/assets/javascripts/discourse/controllers/login.js.es6
@@ -78,9 +78,10 @@ export default DiscourseController.extend(ModalFunctionality, {
           var destinationUrl = $.cookie('destination_url');
           $hidden_login_form.find('input[name=username]').val(self.get('loginName'));
           $hidden_login_form.find('input[name=password]').val(self.get('loginPassword'));
-          if (self.get('loginRequired') && destinationUrl) {
+          if ((self.get('loginRequired') || $.cookie('shouldRedirectToUrl')) && destinationUrl) {
             // redirect client to the original URL
             $.cookie('destination_url', null);
+            $.cookie('shouldRedirectToUrl', null);
             $hidden_login_form.find('input[name=redirect]').val(destinationUrl);
           } else {
             $hidden_login_form.find('input[name=redirect]').val(window.location.href);
diff --git a/app/assets/javascripts/discourse/routes/new-topic.js.es6 b/app/assets/javascripts/discourse/routes/new-topic.js.es6
index 4ce26ba279b..9c26ce5c8cc 100644
--- a/app/assets/javascripts/discourse/routes/new-topic.js.es6
+++ b/app/assets/javascripts/discourse/routes/new-topic.js.es6
@@ -13,6 +13,7 @@ export default Discourse.Route.extend({
       });
     } else {
       // User is not logged in
+      $.cookie('shouldRedirectToUrl', true);
       self.replaceWith('login');
     }
   }
diff --git a/app/controllers/static_controller.rb b/app/controllers/static_controller.rb
index d62882b50a3..b65f52b0854 100644
--- a/app/controllers/static_controller.rb
+++ b/app/controllers/static_controller.rb
@@ -72,6 +72,7 @@ class StaticController < ApplicationController
            uri.path !~ /\./
 
           destination = uri.path
+          destination = "#{uri.path}?#{uri.query}" if uri.path =~ /new-topic/
         end
       rescue URI::InvalidURIError
         # Do nothing if the URI is invalid