diff --git a/app/views/topics/show.rss.erb b/app/views/topics/show.rss.erb
index a7efff93641..729fa86071d 100644
--- a/app/views/topics/show.rss.erb
+++ b/app/views/topics/show.rss.erb
@@ -31,7 +31,7 @@
         <link><%= post_url %></link>
         <pubDate><%= post.created_at.rfc2822 %></pubDate>
         <guid isPermaLink="false"><%= Discourse.current_hostname %>-post-<%= post.topic_id %>-<%= post.post_number %></guid>
-        <source url="<%= @topic_view.absolute_url %>.rss"><%= @topic_view.title %></source>
+        <source url="<%= topic_url %>.rss"><%= @topic_view.title %></source>
       </item>
     <% end %>
   </channel>
diff --git a/lib/topic_view.rb b/lib/topic_view.rb
index 8020ba72de2..710ca9ddf1b 100644
--- a/lib/topic_view.rb
+++ b/lib/topic_view.rb
@@ -144,7 +144,7 @@ class TopicView
   end
 
   def absolute_url
-    "#{Discourse.base_url}#{relative_url}"
+    "#{Discourse.base_url_no_prefix}#{relative_url}"
   end
 
   def relative_url
diff --git a/spec/components/topic_view_spec.rb b/spec/components/topic_view_spec.rb
index 05fd50db590..6dc6bc72c75 100644
--- a/spec/components/topic_view_spec.rb
+++ b/spec/components/topic_view_spec.rb
@@ -161,7 +161,18 @@ describe TopicView do
     end
 
     it "provides an absolute url" do
-      expect(topic_view.absolute_url).to be_present
+      expect(topic_view.absolute_url).to eq("http://test.localhost/t/#{topic.slug}/#{topic.id}")
+    end
+
+    context 'subfolder' do
+      before do
+        GlobalSetting.stubs(:relative_url_root).returns('/forum')
+        Discourse.stubs(:base_uri).returns("/forum")
+      end
+
+      it "provides the correct absolute url" do
+        expect(topic_view.absolute_url).to eq("http://test.localhost/forum/t/#{topic.slug}/#{topic.id}")
+      end
     end
 
     it "provides a summary of the first post" do
diff --git a/spec/requests/list_controller_spec.rb b/spec/requests/list_controller_spec.rb
index 3ea4170486f..7791f2dda32 100644
--- a/spec/requests/list_controller_spec.rb
+++ b/spec/requests/list_controller_spec.rb
@@ -270,6 +270,17 @@ RSpec.describe ListController do
       expect(response.content_type).to eq('application/rss+xml')
     end
 
+    it 'renders links correctly with subfolder' do
+      GlobalSetting.stubs(:relative_url_root).returns('/forum')
+      Discourse.stubs(:base_uri).returns("/forum")
+      post = Fabricate(:post, topic: topic, user: user)
+      get "/latest.rss"
+      expect(response.status).to eq(200)
+      expect(response.body).to_not include("/forum/forum")
+      expect(response.body).to include("http://test.localhost/forum/t/#{topic.slug}")
+      expect(response.body).to include("http://test.localhost/forum/u/#{post.user.username}")
+    end
+
     it 'renders top RSS' do
       get "/top.rss"
       expect(response.status).to eq(200)
diff --git a/spec/requests/topics_controller_spec.rb b/spec/requests/topics_controller_spec.rb
index ea6638697b6..94c9a010055 100644
--- a/spec/requests/topics_controller_spec.rb
+++ b/spec/requests/topics_controller_spec.rb
@@ -1540,6 +1540,15 @@ RSpec.describe TopicsController do
       expect(response.status).to eq(200)
       expect(response.content_type).to eq('application/rss+xml')
     end
+
+    it 'renders rss of the topic correctly with subfolder' do
+      GlobalSetting.stubs(:relative_url_root).returns('/forum')
+      Discourse.stubs(:base_uri).returns("/forum")
+      get "/t/foo/#{topic.id}.rss"
+      expect(response.status).to eq(200)
+      expect(response.body).to_not include("/forum/forum")
+      expect(response.body).to include("http://test.localhost/forum/t/#{topic.slug}")
+    end
   end
 
   describe '#invite_group' do