diff --git a/app/controllers/permalinks_controller.rb b/app/controllers/permalinks_controller.rb index ee34e6bfaad..fd4264ba2dd 100644 --- a/app/controllers/permalinks_controller.rb +++ b/app/controllers/permalinks_controller.rb @@ -11,7 +11,7 @@ class PermalinksController < ApplicationController raise Discourse::NotFound unless permalink if permalink.target_url - redirect_to permalink.target_url, status: :moved_permanently + redirect_to permalink.target_url, status: :moved_permanently, allow_other_host: true else raise Discourse::NotFound end diff --git a/spec/requests/permalinks_controller_spec.rb b/spec/requests/permalinks_controller_spec.rb index 0053bb4407b..2f421ee6574 100644 --- a/spec/requests/permalinks_controller_spec.rb +++ b/spec/requests/permalinks_controller_spec.rb @@ -44,5 +44,14 @@ RSpec.describe PermalinksController do get "/not/a/valid/url" expect(response.status).to eq(404) end + + context "when permalink's target_url is an external URL" do + before { permalink.update!(external_url: "https://github.com/discourse/discourse") } + + it "redirects to it properly" do + get "/#{permalink.url}" + expect(response).to redirect_to(permalink.external_url) + end + end end end