diff --git a/lib/jekyll/filters/url_filters.rb b/lib/jekyll/filters/url_filters.rb index 783dad4a..53b4e253 100644 --- a/lib/jekyll/filters/url_filters.rb +++ b/lib/jekyll/filters/url_filters.rb @@ -23,9 +23,9 @@ module Jekyll # Returns a URL relative to the domain root as a String. def relative_url(input) return if input.nil? - return ensure_leading_slash(input.to_s) if sanitized_baseurl.nil? + parts = [sanitized_baseurl, input] Addressable::URI.parse( - ensure_leading_slash(sanitized_baseurl) + ensure_leading_slash(input.to_s) + parts.compact.map { |part| ensure_leading_slash(part.to_s) }.join ).normalize.to_s end diff --git a/test/test_filters.rb b/test/test_filters.rb index 91ac386a..bb4aa797 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -491,6 +491,15 @@ class TestFilters < JekyllUnitTest }) assert_equal "/", filter.relative_url(page_url) end + + should "not return the url by reference" do + filter = make_filter_mock({ :baseurl => nil }) + page = Page.new(filter.site, test_dir("fixtures"), "", "front_matter.erb") + assert_equal "/front_matter.erb", page.url + url = filter.relative_url(page.url) + url << "foo" + assert_equal "/front_matter.erb", page.url + end end context "strip_index filter" do