该<base>
标签可以工作,但根据适用于整个页面的规范,这会破坏您页面上的任何其他相对 URL。
如果您不想确保所有其他 URL 都是绝对的,那么下一个最好的方法可能是使用 Nokogiri 来转换这些 URL。例如
require 'uri'
require 'nokogiri'
base_uri = URI 'http://example.com/'
html = %{ <!DOCTYPE html>
<html><body>
<ul>
<li><a href="/some_relative_url.html">Relative</a></li>
<li><a href="http://stackoverflow.com/">Absolute</a></li>
<li><img src="/a_relative_image.png" /></li>
</ul>
</body></html>
}
doc = Nokogiri::HTML html
attrs = %w( @href @src )
doc.search( *attrs ).each do |attr|
path = URI attr
attr.value = ( base_uri + path ).to_s unless path.absolute?
end
puts doc
# => <!DOCTYPE html>
# <html><body>
# <ul>
# <li><a href="http://example.com/some_relative_url.html">Relative</a></li>
# <li><a href="http://stackoverflow.com/">Absolute</a></li>
# <li><img src="http://example.com/a_relative_image.png" /></li>
# </ul>
# </body></html>