相対パスで記載されたURLから、絶対パスに変換する方法

  • どんなときに

open-uriなどで、HTMLページをクロールしたデータを、ローカルで開くと
デザインが崩れていたり、リンクをクリックしても思い通りのところへ飛べないことがあります。

これは、HTML内で相対パスで記載されているものを、そのまま取得しているからです。
そこで、相対パス絶対パスに変換したいのですが、
どのメソッドを使えばいいかわからなかったので、調べると、
標準添付ライブラリで可能だったので、メモしました。
(※URLではなく、ディレクトリの相対パス絶対パス変換は、File.expand_pathメソッドで実行可能です。)

  • 解法

標準添付のURIライブラリのmergeメソッドを使用する。

  • サンプル
#!/usr/local/bin/ruby
require 'uri'

uri = URI.parse('http://hoge.com/test/1234.html')

p uri.merge('/css/def.css').to_s
# => "http://hoge.com/css/def.css"

p uri.merge('../lib/script.js').to_s
# => "http://hoge.com/lib/script.js"

p uri.merge('./5678.html').to_s
# => "http://hoge.com/test/5678.html"